订阅集合中的集合的好Rx方式

时间:2011-06-20 16:39:01

标签: c# silverlight system.reactive

我将描述我的对象模型,然后我想要做什么。

它是一个Silverlight应用程序,它们是绑定到UI元素的模型对象。

协议有一个TradingBranch集合,可以添加或删除分支。分支有Product的集合。

agreement.Branches
         .SelectMany(x => x.Products)
         .Distinct()

这些集合由分支和产品矩阵驱动。相同的产品可以由多个分支选择,因此是Distinct。

基本上我想让用户从已选择为任何分支可用的所有产品的列表中进行选择。我希望在矩阵发生变化时更新此列表。

因此,不必为分支添加CollectionChanged处理程序,然后更多处理程序来监听Products集合,确定产品是否已经存在,然后在分支被删除等时必须取消订阅,我希望那里是一个很好的Rx语法,我可以简单地说 - “听这段LINQ”并更新这个我正在绑定我的ListBox的其他可观察集合,当它发生变化时。

2 个答案:

答案 0 :(得分:0)

尽管名称相似,但IObservable和ObservableCollection完全不相关,遗憾的是也不兼容。他们有两个非常不同的观察集合的模型。

看看Bindable LINQ。它尝试定义LINQ-to-ObservableCollection,以便ObservableCollection上的LINQ查询再次导致ObservableCollection。然而,该项目似乎已经死了,我还没有使用推荐的替代品(Obtics)。

答案 1 :(得分:0)

尝试使用我的ObservableComputations库:

agreement.Branches
         .SelectingMany(x => x.Products)
         .Distincting()

agreement.BranchesProducts的类型应为INotifyCollectionChanged(ObservableCollection)。