积极答复者
MVVM 模式下,编辑对象点击取消按钮,该如何还原列表中的数据?

问题
-
大家好,我在使用silverlight MVVM模式时,遇到一些问题:
1.我做了一个增删改查用户(User)的模块,使用的是WCF,而不是WCF ria,
2.首先,我建立了一个页面(UserList.xaml),在UserList.xaml页面中,放了一个DataGrid用于列出所有用户(User),
3.然后点击某个用户前面的“修改”按钮,将弹出修改用户页面窗口(UpdateUserWindow.xaml),
4.由于采用的 MVVM 模式,我在ViewModel中建了一个SelectedUser的属性,该属性双向绑定DataGrid中的SelectedItem属性,弹出的UpdateUserWindow窗口中,所有的控件双向绑定ViewModel中的SelectedUser的各个属性(比如用户名,电话等),这样在UpdateUserWindow中更改各个字段,UserList页面的DataGrid中的数据也可以看到实时的更改,
5.但如果用户改完数据后点击“取消”按钮关闭UpdateUserWindow话,UserList页面的DataGrid中的数据已经被更改了(虽然没有提交到数据库),
怎样避免这个问题??
- 已编辑 jesse hao 2013年8月15日 6:20
答案
-
我记得我回答过这个问题了,很简单,给你的 UpdateUserWindow.xaml 绑定一个 SelectedUser 的副本,也就是你需要一个 EditUser 从 SelectedUser Clone 过来。如果点击“确定”,则把这个 EditUser 的值更新到 SelectedUser 去,点击“取消”,什么都不做,直接把 EditUser 设置为 null。
我还知道你的 User 类很复杂,那么你给每个类都实现 Clone,然后 Clone 的代码就简单了。
- 已标记为答案 Yanping WangModerator 2013年9月4日 9:01
全部回复
-
我记得我回答过这个问题了,很简单,给你的 UpdateUserWindow.xaml 绑定一个 SelectedUser 的副本,也就是你需要一个 EditUser 从 SelectedUser Clone 过来。如果点击“确定”,则把这个 EditUser 的值更新到 SelectedUser 去,点击“取消”,什么都不做,直接把 EditUser 设置为 null。
我还知道你的 User 类很复杂,那么你给每个类都实现 Clone,然后 Clone 的代码就简单了。
- 已标记为答案 Yanping WangModerator 2013年9月4日 9:01