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

时间:2010-01-20 23:23:15

标签: c# wcf data-binding collections

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

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

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

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

可能的解决方案

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

您如何看待这些选择?当你遇到这个问题时,你如何解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

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