【发布时间】:2014-12-01 10:14:39
【问题描述】:
我正在开发一个使用 Catel 的 MVVM (4.0.0) 实现的程序。我有一个模型类,它作为一些业务逻辑 - 它必须遵守关于它的属性值之一的规则。
例如,假设我有一个 Trap 类,它有一个 TargetValue 和一个 CurrentValue 属性。对于这个类,有一个规则必须强制 TargetValue 属性只能小于或等于 (CurrentValue。 (CurrentValue 是通过系统中的一些事件更新的)。
陷阱向用户公开(我有一个 VM,其中包含此类陷阱的列表并绑定到 UI 中的数据网格),她可以在其中更改 TargetValue。
最初我想创建一个虚拟机来包装Trap 对象实例并在那里执行规则,但由于该规则实际上与模型(或业务逻辑,也就是说,我可能在任何地方都需要相同的规则)使用Trap 类)我认为最好在TargetValue 的属性设置器中实现它(我将检查新值的有效性并重置或不更改基础字段值)。
所以我应该在 setter 中执行此操作(这甚至是正确的实现吗?) - 有没有办法通知 VM(或 UI 直接)存在违规(例如通过设置单元格边框颜色或其他方式) ?
我想也许我可以使用RaisePropertyChanging 与RaisePropertyChanged 合作,ObservableObject 暴露虽然看起来很麻烦。
这种模式有合适的方法吗?
谢谢,
汤姆
【问题讨论】: