【问题标题】:How can i list properties of child objects in the WPF Tookit PropertyGrid?如何在 WPF Tookit PropertyGrid 中列出子对象的属性?
【发布时间】:2014-07-13 11:03:42
【问题描述】:

我正在使用 Xceed WPF takeit 属性网格中的 propertyGrid。

当我将一个对象绑定到网格时,它会使用 ToString() 方法列出其中的嵌套类并且是只读的。我希望它还列出这些嵌套类中的属性。属性网格是否支持这一点?有没有更好的图书馆?

例如

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。

【问题讨论】:

  • 我建议使用数据模板而不是属性网格。我认为通过更改更易于维护。您有足够的控制权对特定类型进行特定更改

标签: c# wpf propertygrid


【解决方案1】:

给你

<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" 使属性编辑器能够扩展到子属性

您也可以通过覆盖CustomerVector类中的ToString()方法来自定义根(vector1,vector2)的显示值

例如

    public override string ToString()
    {
        return string.Format("{0}, {1}, {2}, {3}", a, b, c, d);
    }

结果

【讨论】:

  • 不得不说这些定义是可以先发制人的。这意味着即使您在特定类型的列表中没有该属性,也完全可以 - 一旦您添加了一些其他对象,IsExpandable 就会发挥作用。方便。
【解决方案2】:

我们也可以在嵌套对象上使用 [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;
    }
}

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

【讨论】:

    猜你喜欢
    • 2019-12-24
    • 2011-08-11
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多