如何在WPF Toolkit PropertyGrid中列出子对象的属性?

时间:2014-07-13 11:03:42

标签: c# wpf propertygrid

我正在使用来自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。

2 个答案:

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

结果

result

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

我似乎找不到一个选项来让它默认对任何对象执行此操作。