【发布时间】:2010-01-20 23:23:15
【问题描述】:
我有一个包含ListView 和“编辑”按钮的视图。 ListView 的ItemSource 绑定到底层视图模型上的ObservableCollection<Account> 属性。它的SelectedItem 属性也绑定到视图模型。
单击编辑按钮时,现有视图模型会启动编辑视图/视图模型对(“编辑屏幕”),允许用户编辑当前选定的Account。要编辑的Account 由主视图模型的SelectedItem 属性决定。
问题:在编辑屏幕中所做的任何更改都会立即反映在另一个屏幕的ListView 中,甚至在单击编辑屏幕的“保存”按钮之前。为什么会发生这种情况是有道理的——Account 在其属性发生更改并且ListView 正在处理这些通知时引发属性更改事件。
期望结果:绑定控件(如ListView)应该只在点击“保存”后才能看到编辑屏幕的变化。
可能的解决方案
- 在进行编辑时暂停帐户的属性更改通知。缺点:如果在编辑
Account实例时执行手动数据绑定更新,“进行中”更改将出现在ListView上,即使这些更改尚未发出通知。此外,如果用户为相同的Account启动第二个编辑窗口,他们将看到“进行中”的更改。想法被拒绝。 - 让编辑屏幕视图模型将
Account实例包装在某种EditingAccount类中,该类仅在调用Save()时将对其所做的更改复制回原始Account。编辑屏幕应该负责促进这种包装,还是应该要求服务层来做?
您如何看待这些选项?遇到这个问题怎么解决?
【问题讨论】:
标签: c# wcf data-binding collections