2016-04-28 73 views
0

我有一个属性网格显示类的属性一个PropertyGrid中显示类的列表和它的属性(我们称之为MyClass的)如何实现接口的C#

我想在MyClass的属性它将包含实现接口的所有类(我们称之为ISomething),并将在PropertyGrid中表示为下拉列表(当您具有枚举时相同的行为)

接下来,在列表中选择其中一个类时获取所选类的所有属性并显示在属性Grid中

我做了s ome阅读并找到了如何获取所有类列表并创建它的实例的一些部分解决方案,但不知道如何使用此实例在属性网格中创建类列表。

var instances = from t in Assembly.GetExecutingAssembly().GetTypes() 
      where t.GetInterfaces().Contains(typeof(ISomething)) 
        && t.GetConstructor(Type.EmptyTypes) != null 
      select Activator.CreateInstance(t) as ISomething; 

foreach (var instance in instances) 
{ 
instance.Foo(); // where Foo is a method of ISomething 
} 

有什么建议吗?

+0

此代码与属性网格无关。你在物业网格区域尝试过什么? –

+0

我没有实现它到网格,你是对的,这将无法正常工作 –

回答

0

使用Ninject

var kernel = new StandardKernel(); 
kernel.Bind<ISomething>().To<Something>(); 
kernel.Bind<ISomething>().To<Something2>(); 

var instances = kernal.GetAll<ISomething>(); 
foreach (var instance in instances) 
{ 
    instance.Foo(); 
} 
0

下面的代码将返回对象的List并且每个对象将有类名和属性名的List

var classesWithProperties = 
    Assembly.GetExecutingAssembly() 
      .GetTypes() 
      .Where(t => t.GetInterfaces().Contains(typeof(ISomething)) && t.IsClass) 
      .Select(c => new { ClassName = c.FullName, Properties = c.GetProperties().Select(p => p.Name)}) 
      .ToList(); 

然后你就可以通过这个迭代收藏并按照你的意愿展示它。

+0

所以在我通过classesWithProperties中的每个对象之后,我将如何显示类集合列表以及每个类的属性和属性值。它不返回属性列表。另外我假设在你的代码Ilist是在我的情况下isomething –

+0

正确。刚刚编辑。 – MaKCbIMKo

+0

这里我做了什么到目前为止Dictionary classObject = new Dictionary ();在我调用我的代码我做foreach(var类在classesWithProperties) { classObject.Add(field.ClassName,field.Properties as ISomething); }当我调用propertygrid调用属性与指令名单我得到名称正确的另一边我得到ISomthing-> Value->键和价值提交没有任何值 –