C# Datagrid内部的Datagrid-带有基于父Datagrid值的筛选器

C# Datagrid内部的Datagrid-带有基于父Datagrid值的筛选器,c#,wpf,datagrid,C#,Wpf,Datagrid,我不确定这篇文章的标题是否具有足够的描述性,很难用语言表达 我得到的是: 装运 容器 包裹 我正在做的是有一个装运的datagrid,每个装运行都有一个扩展器,可以显示容器的datagrid,每个容器行都有一个扩展器,可以显示包的datagrid 现在我知道我使用了一个rowdetails.template,里面有一个数据网格,我的问题是因为对象装运、容器和包是分开的,并且通过对象上的ID进行逻辑链接 因此,很明显,因为作为一个孩子,Shipping对象没有可以绑定的容器列表,所以我不确定如何获

我不确定这篇文章的标题是否具有足够的描述性,很难用语言表达

我得到的是:

装运 容器 包裹

我正在做的是有一个装运的datagrid,每个装运行都有一个扩展器,可以显示容器的datagrid,每个容器行都有一个扩展器,可以显示包的datagrid

现在我知道我使用了一个
rowdetails.template
,里面有一个数据网格,我的问题是因为对象装运、容器和包是分开的,并且通过对象上的ID进行逻辑链接

因此,很明显,因为作为一个孩子,Shipping对象没有可以绑定的容器列表,所以我不确定如何获得我正在寻找的结果,甚至不确定使用我当前的设置是否可以获得该结果

欢迎提出任何建议

编辑:

我想知道是否值得为此
viewmodel
创建一个新的模型,该模型将包含装运信息和包含包裹列表的容器模型列表。这样,我可以将每个子
datagrid
数据绑定到父模型列表。(如果有道理的话)


或者这看起来是错误的吗?

你是对的,很难对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);
        }

您是对的,在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);
        }

“每个装运行”应该是单元格而不是行,对吗?不,每个装运都是datagrid中的一行。好的,单元格包含哪些内容?单元格包含装运信息,例如ShipmentID、ShipmentNo、装运日期、装运等。“每个装运行”应该是单元格而不是行,对吗?不,每个装运都是datagrid中的一行。好的,您的单元格包含哪些内容?这些单元格包含有关装运的信息,例如ShipmentID、ShipmentNo、航行日期、Ship等。我认为这是最好的方法,因为数据是在异地访问的。数据实际上是从web服务而不是数据库本身提取的。谢谢你的回复。我认为这是最好的解决方法,因为数据是在异地访问的。数据实际上是从web服务而不是数据库本身获取的。谢谢你的回复。