编辑ObservableCollection的SelectedItem没有绑定控件看到编辑直到它们被保存

我有一个包含ListView和“编辑”按钮的视图。 ListView的ItemSource绑定到底层视图模型上的ObservableCollection属性。 其SelectedItem属性也绑定到视图模型。

单击编辑按钮时,现有视图模型将启动编辑视图/视图模型对(“编辑屏幕”),允许用户编辑当前选定的Account 。 要编辑的Account由主视图模型的SelectedItem属性确定。

问题:即使在单击编辑屏幕的“保存”按钮之前,编辑屏幕中所做的任何更改都会立即反映在其他屏幕的ListView 。 为什么会发生这种情况有意义 – 在更改属性并且ListView正在处理这些通知时, Account正在提升属性更改事件。

期望的结果:绑定控件(如ListView )只应在单击“保存”后才能看到编辑屏幕更改。

可能的解决方案

  • 在编辑过程中暂停帐户的属性更改通知。 缺点:如果在编辑Account实例时执行手动数据绑定更新,则“正在进行”更改将显示在ListView上,即使这些更改尚未引发通知。 此外,如果用户为同一个Account启动第二个编辑窗口,他们将看到“正在进行中”更改。 想法被拒绝。
  • 让编辑屏幕视图模型将Account实例包装在某种EditingAccount类中,该类仅在调用Save()Save()对其所做的更改复制回原始Account 。 编辑屏幕是否应承担促进此包装的责任,还是应该要求服务层执行此操作?

你怎么看待这些选择? 遇到它时如何解决这个问题?

我会选择第二个选项的某个版本。 基本上这是MVVM模式的变体,被认为是执行WPF / Silverlight代码的“正确”方式。 基本上你应该为每个“屏幕”(View)设置一个ModelView对象,它包装模型并以特定于View的格式公开模型,因此它完全符合View的需要而且没有更多。