我不确定这个标题是否足够描述,很难说出来。
我拥有的是:
货 集装箱 封装
我正在做的是拥有货件的数据网格,而每个货件行都有一个展开的数据网格的扩展程序容器和每个 Container 行都有一个扩展器,显示 Packages 的数据网格。
现在我知道我使用了rowdetails.template
并且其中有一个数据网格,我的问题就出现了,因为对象发货,容器和包是分开的,并通过对象上的ID进行逻辑链接。
很明显,因为 Shipment 对象没有 Containers 的列表作为我可以绑定的子项,所以我不确定如何获得我正在寻找的结果,或者即使可以通过我当前的设置获得该结果。
欢迎任何建议。
编辑:
我想知道是否值得为此viewmodel
创建新模型,其中包含货件信息和 Container 包含包列表的模型。这样我就可以数据绑定每个子datagrid
到父模型列表。 (如果那样有意义)
或者这似乎是以错误的方式进行的?
答案 0 :(得分:1)
你是对的,很难将过滤器应用于xaml中的项目列表,更容易拥有一个视图模型,其中每个父对象都有一个子对象的ObservableCollection或CollectionView。您将需要AllShipmentsVM,ShipmentVM,ContainerVM以及可能的PackageVM。
如果数据来自数据库,您是否可以使用EF来构建子对象集合?
否则,使用ICollectionView显示项目并为每个父视图模型设置过滤器......
foreach (var s in allShipments)
{
var svm = new ShipmentVM
{
Shipment = s,
Containers = (new CollectionViewSource { Source = allContainerVMs }).View
};
svm.Containers.Filter = (o) => (o as ContainerVM).Container.ShipmentID == svm.Shipment.ShipmentID;
allShipmentVMs.Add(svm);
}