ObservableCollection<T> 由其他7个 ObservableCollection<T> 集合组成。

4
我将有7个小的“购物清单”,然后有一个包含所有7个小清单中的项目的大清单。
是否可以使用数据绑定和ObservableCollection,以便从小清单中添加/删除/更改的任何内容都会更新到大清单中?
public ObservableCollection<ShopItem> MondayShopList{ get; set; }
public ObservableCollection<ShopItem> TuesdayShopList{ get; set; }
public ObservableCollection<ShopItem> WedensdayShopList{ get; set; }
public ObservableCollection<ShopItem> ....
public ObservableCollection<ShopItem> TotalShopList { get; set; }
2个回答

3
我为您提供三种选择:
  1. 实现一个组合的ObservableCollection。如果没有现成的,您可以通过实现INotifyCollectionChanged来构建一个。
  2. 将所有项加载到总列表中,并自己响应dayweek集合的集合更改事件,并对完整集合进行更新。
  3. 进行小型架构更改并将weekday信息附加到ShopItem上。现在,您可以将它们全部保存在一个列表中,并显示大列表的过滤部分。

如何在该列表中仅显示ShopItem.Day == 1的内容? - Mech0z
我还没有测试过,但可以探索与CollectionView和CollectionViewSource相关的功能,这些功能提供了筛选能力等。另请参阅https://dev59.com/ukzSa4cB1Zd3GeqPjhuK - flq

0

不可能使用数据绑定嵌套集合,除非使用支持分层数据绑定的WPF TreeView控件。如果要显示子集合的内容,请将它们单独绑定到Ui上。它们是另一个集合的子集合的事实属于代码后台的范畴,并不一定反映其在Ui上的确切关系表示。

要获取有关这些方案实现的具体帮助,请查看此MSDN文章


这不是事实,您可以使用 TreeView 控件来表示集合的集合。 - myermian
@m-y:你设置了一个很严格的限制,要求使用一个特定的控件来解决这个问题。但问题是普遍存在的。一般的解决方案是将数据模型在不同的控件之间进行切片,其中TreeView控件能够自己承载分层数据,是一种特殊情况。 - Tigran
1
我只是在评论您的回答中的一句话:“不,无法绑定嵌套集合。” 我没有说OP应该走这条路,只是声明它是可以在UI中表示集合的集合。 - myermian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接