c# - PropertyGrid --> 从列表中选择对象<对象>

标签 c# propertygrid

有没有办法像 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/

相关文章:

c# - 为 SOAP 网络服务传递 WSSE Usernametoken 的正确方式

c# - CsvHelper 从抽象类中保存派生类对象

c# - 使自定义控件的属性输入类似于多行文本框

c# - 属性网格项和 DoubleClick

.net - 如何强制对系统类型使用自定义 UITypeEditor

c# - 日期的 Excel Interop 单元格格式

c# - Silverlight 托管在 Winforms 中

c# - 如何使用 wpf 和使用 mvvm 将窗口置于最前面

c# - PropertyGrid 和对象的动态类型

extjs - 在 ExtJS 中禁用属性网格上的自动排序