【发布时间】:2012-08-16 19:50:53
【问题描述】:
假设我有一个网格控件,无论是普通的 WPF 网格还是 DevExpress 网格或其他网格,它数据绑定到财务头寸集合,每个设置的时间间隔(比如 2-3 秒)刷新一次。总的来说,我对 Prism 和 WPF 还比较陌生
因为视图模型不应该对它所绑定的视图做出任何假设,因此即使假设有一个网格,我将如何实现多个规则,例如,我希望一个单元格根据某些标准在网格中突出显示基于同一行中的其他值? (例如,如果 x > a + b 代表一行)
或者更复杂的事情,比如在 View-Model 上调用某种计算方法来获得所需的标准? (否则我可以在第一个示例中使用数据触发器)
我将如何设计它并从视图模型中公开这种行为,以及我将如何在视图上设置绑定表达式,以便它们在每次滴答时自动重新评估和更新自己? (不减速)
【问题讨论】:
-
您可以对这两个示例使用数据触发器...您可以公开一个属性,您的行可以绑定到该属性,该属性可以调用方法或运行其他属性的计算。然后,您可以在此属性上调用 PropertyChanged,您的行将根据您的视图逻辑更新......至于“不减速”,这样做将取决于正在运行的计算
-
太好了,触发器将设置为在底层对象上键入的视图资源中的样式,对吧?如果网格绑定到底层对象未实现 INotifyPropertyChanged 的 ObservableCollection
会发生什么? -
1) 样式将在您的 GridRow 上键入(如果这是您要更改其属性的控件)和 2) 为 T 编写一个实现 INotifyPropertyChanged 的包装器并绑定您的 ObservableCollection 可能是明智的到那个新班级。
-
Gotcha - 所以基本上网格只能找出底层数据已更改,因此如果底层绑定对象支持提供的更改通知接口,则通过数据触发器应用突出显示通过提高 PropertyChanged 的二传手? (你能把这个作为答案,所以我可以给你信用)
-
当然...请记住,此属性不一定必须有一个设置器。它可以是只读的,只有一个 getter,并且您的 PropertyChanged 通知可以来自代码中的任何位置。