重新计算WPF中可绑定对象的聚合?

时间:2016-09-01 02:29:36

标签: wpf mvvm data-binding prism observablecollection

假设我有一个主数据库类TvShowDatabase,其中包含Shows列表。每个Show都有一个Episodes列表,每个列表都有一个Length。对象TvShowDatabaseShowEpisode都实现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}}需要的事件。

有这种模式吗?

1 个答案:

答案 0 :(得分:0)

正如您所描述的那样,任务有一个简单的解决方案。您无需沿集合传播更改。

TotalViewingPotential是正常的INotifyPropertyChanged属性。可以从长度属性访问它。

在Length属性的setter中,计算新值和旧值之间的差值,并按差值递增TotalViewingPotential。

就是这样。

为了加快初始加载速度,为了不为所有长度生成通知,您可以设置长度的支持字段的值,并根据数据库中的值计算和设置TotalViewingPotential。