我正在使用来自Xceed WPF的属性网格中的propertyGrid。
当我将对象绑定到网格时,它使用ToString()方法列出其中的嵌套类,并且是只读的。我希望它也列出这些嵌套类中的属性。财产网格支持这个吗?有没有更好的图书馆?
e.g。
Class Parameters {
public int number {get;set;}
Public CustomVector vector1 {get; set;}
Public CustomVector vector2 {get; set;}
}
Class CustomerVector {
public double a {get; set;}
public double b {get; set;}
public double c {get; set;}
public double d {get; set;}
}
在这种情况下,它只列出3个元素,返回vector1和vector2的ToString()。我想让它编辑两个向量的a,b,c,d。
答案 0 :(得分:3)
你去吧
<xctk:PropertyGrid SelectedObject="{Binding Parameters}">
<xctk:PropertyGrid.PropertyDefinitions>
<xctk:PropertyDefinition Name="number" />
<xctk:PropertyDefinition Name="vector1"
IsExpandable="true" />
<xctk:PropertyDefinition Name="vector2"
IsExpandable="true" />
</xctk:PropertyGrid.PropertyDefinitions>
</xctk:PropertyGrid>
IsExpandable="true"
使属性编辑器能够扩展到子属性
您也可以通过覆盖ToString()
类
CustomerVector
方法来自定义root(vector1,vector2)的显示值
例如
public override string ToString()
{
return string.Format("{0}, {1}, {2}, {3}", a, b, c, d);
}
结果
答案 1 :(得分:0)
我们还可以在嵌套对象上使用 [ExpandableObject] 属性,但这意味着使用WPF / presentation属性污染该类(您可以将数据类包装在UI模型类中以保留内容)单独)。
如果我们只是希望可扩展未知对象类型中的所有嵌套对象,则可以执行以下操作:
private void PropGrid_PreparePropertyItem(object sender, PropertyItemEventArgs e)
{
var prop = e.Item as PropertyItem;
if (prop != null)
{
prop.IsExpandable = prop.PropertyType.IsClass;
}
}
我似乎找不到一个选项来让它默认对任何对象执行此操作。