如何在实现接口C#的propertygrid中显示类及其属性的列表

时间:2016-04-28 15:12:39

标签: c# class interface propertygrid

我有一个显示类属性的属性网格(让我们称之为MyClass)

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

接下来,当选择列表中的一个类时,将获得所选类的所有属性并显示在propertyGrid中

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

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
}

有什么建议吗?

2 个答案:

答案 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();
}

答案 1 :(得分: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();

然后您可以按此集合进行迭代并根据需要显示它。