有没有办法像 propertyGrid 中的选择组合框一样使用列表?
例如,是否可以有一个这样的类:
public class Foo
{
[DisplayName(nameof(SelectedBar)),
Browsable(true)]
public Bar SelectedBar { get; set; } = null;
[Browsable(false)]
public List<Bar> Bars { get; set; } = new List<Bar>() { new Bar("Bar0"), new Bar("Bar1"), new Bar("Bar2") };
}
public class Bar
{
public string Name;
public Bar(string name) { Name = name; }
public override string ToString()
{
return Name;
}
}
在 propertyGrid 中,让我选择“Bar”列表中的对象之一。
最佳答案
好的,我找到了解决方案:
您需要一个带有静态对象列表变量的派生转换器类:
public class ListStringConverter: StringConverter
{
public static List<object> Objects = new List<object>();
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
return new StandardValuesCollection(Objects);
}
}
并将带有转换器的 TypeConverter-Attribute 添加到 selectedObject 变量:
public class Foo
{
public Foo()
{
ObjectListStringConverter.Objects = new List<object>(){ new Bar("Bar0"), new Bar("Bar1"), new Bar("Bar2") };
}
[DisplayName(nameof(SelectedBar)),
Browsable(true),
TypeConverter(typeof(ObjectListStringConverter))]
public Bar SelectedBar { get; set; } = null;
}
public class Bar
{
public string Name;
public Bar(string name) { Name = name; }
public override string ToString()
{
return Name;
}
}
在某些时候,您需要用您想要在列表中包含的对象填充转换器类的静态对象列表变量,就像我在上面的 Foo-Constructor 中所做的那样。
编辑:列表将显示您添加到列表中的每个对象的 ToString() 方法返回值。
关于c# - PropertyGrid --> 从列表中选择对象<对象>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52877799/