none
MVVM 模式下,编辑对象点击取消按钮,该如何还原列表中的数据? RRS feed

  • 问题

  • 大家好,我在使用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中的数据已经被更改了(虽然没有提交到数据库),

    怎样避免这个问题??


    2013年8月15日 6:18

答案

  • 我记得我回答过这个问题了,很简单,给你的 UpdateUserWindow.xaml 绑定一个 SelectedUser 的副本,也就是你需要一个 EditUser 从 SelectedUser Clone 过来。如果点击“确定”,则把这个 EditUser 的值更新到 SelectedUser 去,点击“取消”,什么都不做,直接把 EditUser 设置为 null。

    我还知道你的 User 类很复杂,那么你给每个类都实现 Clone,然后 Clone 的代码就简单了。

    2013年8月21日 9:58

全部回复

  • 你好,

    改完数据就已经保存了,无论点击‘取消’还是‘保存’

    2013年8月21日 9:55
  • 我记得我回答过这个问题了,很简单,给你的 UpdateUserWindow.xaml 绑定一个 SelectedUser 的副本,也就是你需要一个 EditUser 从 SelectedUser Clone 过来。如果点击“确定”,则把这个 EditUser 的值更新到 SelectedUser 去,点击“取消”,什么都不做,直接把 EditUser 设置为 null。

    我还知道你的 User 类很复杂,那么你给每个类都实现 Clone,然后 Clone 的代码就简单了。

    2013年8月21日 9:58
  • 那这样,用户点去掉也是保存,确定也是保存,是不是不太好?
    2013年8月23日 4:35
  • 那这样,用户点去掉也是保存,确定也是保存,是不是不太好?

    用户点击“取消”,什么都不做,关闭 UpdateUserWindow;

    用户点击“确定”,将 EditUser 的值复制到 SelectedUser;

    不存在你说的取消也是保存,确定也是保存。

    2013年8月23日 5:07