【发布时间】:2019-06-20 01:36:34
【问题描述】:
我在实体框架中有 3 个实体:
收藏
子集合
子子集合
集合实体与子集合实体具有一对多的关系,而子集合实体又与子子集合实体具有一对多的关系。所有都是通过CollectionViewSource collectionViewSource 访问的可观察集合。
现在,在 XAML 中遍历 collectionViewSource 的层次结构很容易;我可以写ItemsSource="{Binding collectionViewSource/subcollection/subsubcollection}"之类的东西来遍历每个级别的当前项目。
在 C# 中,我可以通过编写 collectionViewSource.View.CurrentItem 来访问我视图中的当前集合项。但是,我需要能够比这更深入地研究,访问当前的子集合项以查看其子集合。我该怎么做?
【问题讨论】:
-
没有直接的等价物。
/进行属性遍历,但通过父/子绑定考虑绑定的当前位置。您需要查看树中所有绑定的CollectionViewSource的当前项以获取当前值。这不是一项简单的任务。 -
啊,我担心会是这样。我可能会从 UI 中的 ListView 获取子子集合,但这感觉有点破坏了我的关注点分离,而且无论如何我已经引用了 collectionViewSource,所以这似乎是一种更清洁的方式关于它。
-
您没有参考您正在使用的收藏吗?您正在寻找当前项目 3 级以下似乎有点奇怪。您是否真的直接绑定到实体框架对象而不是保存其数据的视图模型?
-
我必须同意@Andy。实际上,我必须查找路径绑定语法中的
/做了什么,因为我以前从未遇到过它。当我过去完成这种多级绑定时,我总是在每个级别的选定项目的视图模型上都有一个属性。这样,访问向下第 3 层的值就像检查我感兴趣的层的视图模型上的属性值一样简单。 -
@BradleyUffner,您的第一条评论回答了我猜想的问题,因此我们应该将其提升为答案。无论如何,也许这只是我对绑定引擎最佳实践的误解。在我的程序中,我将在 XAML 中有一个带有
DataContext = "{StaticResource collectionViewSource}"的网格,然后在该控件中创建一个带有ItemsSource="{Binding subcollection}"的子项(即,一个ListView),我只是让绑定引擎完成它的工作。除了加载数据外,我没有触及后面代码中的任何绑定集合。但在这里我需要在事件处理程序中处理一些逻辑。
标签: c# wpf xaml data-binding collectionviewsource