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中描述属性
或者是否有不同的方法仅显示myGridView
中特殊类型的项?您想做的事情无法工作,因为数据网格列中显示的属性必须出现在items
集合的每个条目中。只有在基类
中声明的属性才能保证出现在放入项
集合的每个实例中
这就是为什么AutoGenerateColumns
不创建子实例的列的原因。您有几个选项可以解决此问题:
将您的收藏更改为仅获取您的ChildClass
在基类中实现ChildProperty
,并让ChildClass
重载它
使用包含要公开的所有属性的包装对象,并让它根据包装对象的类型处理获取正确值和属性的操作
您可以使用动态对象和类型描述符来获取每个对象的属性。有一个例子说明了这一点
您可以在XAML中声明列