C# WPF DataGrid AutoGenerateColumn基类继承

C# WPF DataGrid AutoGenerateColumn基类继承,c#,.net,wpf,xaml,gridview,C#,.net,Wpf,Xaml,Gridview,在数据网格中显示特殊类型的项时出现问题。我创建了一个最小的示例 假设我有一个抽象的基类和许多继承的子类: public abstract class BaseClass { public int BaseProperty { get; set; } } //Many ChildClasses possible public class ChildClass : BaseClass { public int ChildProperty { get; set; } } My Da

数据网格中显示特殊类型的项时出现问题。我创建了一个最小的示例

假设我有一个抽象的
基类
和许多继承的
子类

public abstract class BaseClass
{
    public int BaseProperty { get; set; }
}

//Many ChildClasses possible
public class ChildClass : BaseClass
{
    public int ChildProperty { get; set; }
}
My DataContext包含所有项的集合:

public ObservableCollection<BaseClass> Items { get; set; }
下面是使用
CollectionViewSource
生成的
GridView

<CollectionViewSource Source="{Binding Items}" x:Key="ChildClasses" Filter="ChildClassesFilter"/>
<DataGrid ItemsSource="{Binding ChildClasses}"/>

现在我的问题是:
DataGrid
中,仅自动显示
BaseProperty
AutoGenerateColumns
)。如何强制WPF也显示
ChildProperty
,而不在XAML中描述属性


或者是否有不同的方法仅显示my
GridView
中特殊类型的项?

您想做的事情无法工作,因为数据网格列中显示的属性必须出现在
items
集合的每个条目中。只有在
基类
中声明的属性才能保证出现在放入
集合的每个实例中

这就是为什么
AutoGenerateColumns
不创建子实例的列的原因。您有几个选项可以解决此问题:

  • 将您的收藏更改为仅获取您的
    ChildClass
  • 基类中实现
    ChildProperty
    ,并让
    ChildClass
    重载它
  • 使用包含要公开的所有属性的包装对象,并让它根据包装对象的类型处理获取正确值和属性的操作
  • 您可以使用动态对象和类型描述符来获取每个对象的属性。有一个例子说明了这一点
  • 您可以在XAML中声明列