Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WPF Tookit PropertyGrid中列出子对象的属性?_C#_Wpf_Propertygrid - Fatal编程技术网

C# 如何在WPF Tookit PropertyGrid中列出子对象的属性?

C# 如何在WPF Tookit PropertyGrid中列出子对象的属性?,c#,wpf,propertygrid,C#,Wpf,Propertygrid,我正在使用Xceed WPF tookit属性网格中的propertyGrid 当我将一个对象绑定到网格时,它会使用ToString()方法列出其中的嵌套类,并且是只读的。我希望它也列出这些嵌套类中的属性。属性网格支持这一点吗?有更好的图书馆吗 e、 g 在本例中,它只列出3个元素,返回vector1和vector2的ToString()。我希望它能让我编辑两个向量的a,b,c,d。给你 <xctk:PropertyGrid SelectedObject="{Binding Paramet

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

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

e、 g

在本例中,它只列出3个元素,返回vector1和vector2的ToString()。我希望它能让我编辑两个向量的a,b,c,d。

给你

<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>
结果

给你

<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>
结果


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

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

我们也可以在嵌套对象上使用[ExpandableObject]属性,但这意味着用WPF/表示属性污染类(可以将数据类包装在UI模型类中以保持独立)

如果我们只是想让未知对象类型中的所有嵌套对象都可扩展,我们可以这样做:

private void PropGrid_PreparePropertyItem(object sender, PropertyItemEventArgs e)
{
    var prop = e.Item as PropertyItem;
    if (prop != null)
    {
        prop.IsExpandable = prop.PropertyType.IsClass;
    }
}

我似乎找不到一个选项,可以让它在默认情况下对任何对象执行此操作。

我建议使用数据模板而不是属性网格。我认为随着变化,这更易于维护。您有足够的控制权对特定类型进行特定更改。我建议使用数据模板而不是属性网格。我认为随着变化,这更易于维护。您有足够的控制权对特定的类型进行特定的更改,可以说这些定义可以先发制人地进行。这意味着,即使您在特定类型的列表中没有该属性,这也完全没问题——一旦您添加了其他对象,
IsExpandable
将生效。方便。必须说这些定义可以先发制人。这意味着,即使您在特定类型的列表中没有该属性,这也完全没问题——一旦您添加了其他对象,
IsExpandable
将生效。实用的