我正在构建一个WPF软件来管理电子元件库存。WPF DataGrid基于对象类型和子类型的动态列
我有以下结构:
public class Part
{
public string Manufacturer { get; set; }
public string PartNumber { get; set; }
}
public class Resistor : Part
{
public string Resistance { get; set;}
public string Power { get; set;}
}
public class Capacitor : Part
{
public string Capacitance { get; set; }
public string Voltage { get; set; }
}
电阻和电容部分的亚型。
我将DataGrid
绑定到ObservableCollection<Part>
,并使用ListCollectionView
来添加过滤和分组功能。
我试图完成的时候我筛选ListCollectionView
只得到了Resistor
亚型是,我希望DataGrid
来更新它的列显示Resistor
类型的属性和它的基类Part
(所以我会得到列制造商,PartNumber,电阻和电源)。同时,如果我筛选ListCollectionView
以获得Capacitor
子类型,则DataGrid
应具有Capacitor
类公共属性和Part
公共属性(制造商,零件编号,电容和电压)。 最后,如果没有应用过滤,DataGrid
将只显示Part
属性(制造商和部件编号)。
我试图用AutoGenerateColumns=true
但DataGrid
只显示Part
特性,即使我过滤ListCollectionView
只具有Resistors
。我也尝试将ObservableCollection
的类型更改为dynamic
,但它也不起作用。
如何根据ObservableCollection
中包含的对象的类型更改DataGrid
列?
这工作,但GetItemProperties仅在应用程序启动时调用。我需要在每次应用从ObservableCollection获取的ListViewCollection过滤时刷新它。这可能吗? – RHaguiuda
是的,但不是很优雅... dataGrid.ItemsSource = null; dataGrid.ItemsSource = PartCollection; – AQuirky
谢谢。很好地工作。 – RHaguiuda