Datagrid中的Datagrid - 使用基于父数据网格值的过滤器

时间:2013-11-28 15:10:22

标签: c# wpf datagrid

我不确定这个标题是否足够描述,很难说出来。

我拥有的是:

货 集装箱 封装

我正在做的是拥有货件的数据网格,而每个货件行都有一个展开的数据网格的扩展程序容器和每个 Container 行都有一个扩展器,显示 Packages 的数据网格。

现在我知道我使用了rowdetails.template并且其中有一个数据网格,我的问题就出现了,因为对象发货容器是分开的,并通过对象上的ID进行逻辑链接。

很明显,因为 Shipment 对象没有 Containers 的列表作为我可以绑定的子项,所以我不确定如何获得我正在寻找的结果,或者即使可以通过我当前的设置获得该结果。

欢迎任何建议。

编辑:

我想知道是否值得为此viewmodel创建新模型,其中包含货件信息和 Container 包含列表的模型。这样我就可以数据绑定每个子datagrid到父模型列表。 (如果那样有意义)

或者这似乎是以错误的方式进行的?

1 个答案:

答案 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);
        }