WPF监视属性更改

时间:2019-03-21 12:13:49

标签: c# wpf

我经常执行以下任务:

我有一组对象(例如,客户),并希望为用户提供这些对象的编辑器。通常,我在编辑器的左侧有一些列表控件,在右侧有一个窗体。表单在左侧显示当前所选对象的属性。

关于任何更改的确认,至少有两种策略:

  • 使编辑器成为模式对话框窗口,并为其提供“确定” /“取消”按钮。单击确定,保存所有对象的所有更改
  • 在右侧表单上方或下方为编辑器提供一个“保存”按钮,使用户可以确认对当前选定对象的更改。

我的问题是关于第二种策略,该策略是使用WPF作为MVVM应用程序实现的:

我想给我的用户一个有关未保存更改的反馈。诸如文本编辑器之类的应用程序通常通过在发生任何更改时启用“保存”按钮,并在用户按下按钮确认其更改后再次禁用它来解决此问题。

如果我理解正确,我将必须监视表单中任何绑定属性的更改(由模型类支持)。通常,我的模型类使用自动属性(没有显式的getter和setter)。是否需要为所有属性编写显式的吸气剂以在发生任何更改时启用“保存”按钮,还是有一种更聪明的方法来实现此目的?

2 个答案:

答案 0 :(得分:3)

根据MVVM模式,您的ViewModels应该实现INotifyPropertyChanged接口,这样您才能轻松订阅PropertyChanged事件并监视属性更改

答案 1 :(得分:1)

如果您不想在模型类中编写可识别INPC的getter和setter,则另一种方法是编写一个相等比较方法,然后在其中调用save命令的可用性回调以比较“实时”带有已编辑对象的对象。我假设您有一个克隆的对象正在编辑,以便在用户选择不保存时进行回滚。

当用户单击并键入内容时,WPF将自动调用它,或者您可以使用std::forward

对其进行提示。