假设我有一个主数据库类TvShowDatabase
,其中包含Shows
列表。每个Show
都有一个Episodes
列表,每个列表都有一个Length
。对象TvShowDatabase
,Show
和Episode
都实现INotifyPropertyChanged
。
我想计算并显示TotalViewingPotential
TvShowDatabase
的属性,该属性对每个Length
的每个Episode
的{{1}}求和。
此外,我们假设用户正在以树形样式查看此结构,并且能够编辑任何Show
的{{1}}。当他们这样做时,Length
应相应更新,并在屏幕上显示结果。
我的问题:在WPF中(特别是使用Prism for MVVM),连接这些更改通知的管道的最佳方法是什么?
我认为拦截会添加到每个列表中(使用Show
)并为TotalViewingPotential
提供任何新项目。然而,这会变得混乱,自上而下的方法更可取。
我已经看过超级可观察集合(http://www.codeproject.com/Tips/694370/How-to-Listen-to-Property-Chang),但我担心这种方法会导致基于事件订阅的内存泄漏,并且仍然需要一些手动管道来提升{{{ 1}}需要的事件。
有这种模式吗?
答案 0 :(得分:0)
正如您所描述的那样,任务有一个简单的解决方案。您无需沿集合传播更改。
TotalViewingPotential是正常的INotifyPropertyChanged属性。可以从长度属性访问它。
在Length属性的setter中,计算新值和旧值之间的差值,并按差值递增TotalViewingPotential。
就是这样。
为了加快初始加载速度,为了不为所有长度生成通知,您可以设置长度的支持字段的值,并根据数据库中的值计算和设置TotalViewingPotential。