我有一个包含ListView
和“编辑”按钮的视图。 ListView的ItemSource
绑定到基础视图模型上的ObservableCollection<Account>
属性。其SelectedItem
属性也绑定到视图模型。
单击编辑按钮时,现有视图模型将启动编辑视图/视图模型对(“编辑屏幕”),允许用户编辑当前选定的Account
。要编辑的Account
由主视图模型的SelectedItem
属性确定。
问题:即使在点击编辑屏幕的“保存”按钮之前,编辑屏幕中所做的任何更改都会立即反映在其他屏幕的ListView
中。为什么会发生这种情况有意义 - Account
在更改属性并且ListView
正在处理这些通知时提升属性更改事件。
所需结果:绑定控件(如ListView
)只应在点击“保存”后才能看到编辑屏幕更改。
Account
实例时执行手动数据绑定更新,则“{1}}中将显示”正在进行中“更改,即使这些更改尚未引发通知。此外,如果用户为同一ListView
启动第二个编辑窗口,他们将看到“正在进行中”更改。想法被拒绝了。Account
实例包装在某种Account
类中,该类仅在EditingAccount
为Account
时将对其所做的更改复制回原始Save()
调用。编辑屏幕是否应该负责促进此包装,还是应该要求服务层执行此操作?您如何看待这些选择?当你遇到这个问题时,你如何解决这个问题呢?
答案 0 :(得分:1)
我会选择某个版本的第二个选项。基本上这是MVVM模式的变体,被认为是执行WPF / Silverlight代码的“正确”方式。基本上你应该为每个“屏幕”(View)设置一个ModelView对象,它包装模型并以特定于View的格式公开模型,因此它完全符合View的需要而且没有更多。