C# 在运行时设置PropertyGrid.SelectedObject
我有一个如下所示的类:C# 在运行时设置PropertyGrid.SelectedObject,c#,propertygrid,C#,Propertygrid,我有一个如下所示的类: public class DashWidgetParameter { public string Name { get; set; } public Type ValueType { get; set; } public object Value { get; set; } public DashWidgetParameter(string ParameterName, Type ParameterType, object Value)
public class DashWidgetParameter
{
public string Name { get; set; }
public Type ValueType { get; set; }
public object Value { get; set; }
public DashWidgetParameter(string ParameterName, Type ParameterType, object Value)
{
this.Name = ParameterName;
this.ValueType = ParameterType;
this.Value = Value;
}
}
这个类被我的应用程序中的一些其他对象用来存储它们各自的参数。每个对象都有一条线
List<DashWidgetParameter> Parameters = new List<DashWidgetParameter>();
下面是几行类似的内容:
paramList.Add(new DashWidgetParameter("Item Type", typeof(int), 40));
paramList.Add(new DashWidgetParameter("Status Categories", typeof(List<string>), new List<string> { "New", "Configured", "Processed" }));
最后几行对于每个对象都是不同的,所以我不能用一组属性列表定义一个类
我想为用户提供一种可视化的方式,让他们能够编辑每个对象的参数值,我希望我可以使用PropertyGrid控件,但我正在努力让它工作
我没有可以将PropertyGrid.SelectedObject设置为的对象,如果我将其设置为上面定义为列表参数的参数,则PropertyGrid只包含两个属性:计数和容量
是否有一种方法可以遍历我的参数列表并将它们逐个添加到PropertyGrid中?尝试以下方法:
public class ParameterList {
public List<DashWidgetParameter> Parameters { get; set; }
}
PropertyGrid.SelectedObject = new ParameterList { Parameters = paramList };
或者,您可以实现自定义视图。我不明白这是一个怎样的解决方案。如果我这样做,PropertyGrid将只有一个名为Parameters的属性。@DewaldSwanepoel Yes,您将得到带有省略号的按钮来调用项目列表。试试看它是否适合你的需要。好吧,我试过了,但它并不能满足我的需要。首先,正如我所怀疑的,它在PropertyGrid中提供了一个带有name参数的属性。如果我单击集合值的省略号,它会弹出一个集合编辑器,显示作为成员的不同属性,每个成员唯一可以更改的属性是名称,而不是值。@DewaldSwanepoel我明白了。如果涉及到类型object的Value属性,则必须使用类型转换器。无法猜测值的类型,因此编辑字段被禁用。