2013-03-06 92 views
3

现状WPF“撤销”深拷贝

我有,我用MVVM和NHibernate WPF应用程序。我有一个带有所有客户的列表框的主/细节窗口,而列表框的selectedItem是用于在细节屏幕中显示客户细目的对象。 在细节中,我有一个添加,编辑,删除,保存和撤消按钮。一切工作与我设置的绑定。

问题

但我撤销按钮,我想使原来的客户对象的副本,所以当我点击撤销按钮的字段将重置了从原始值的值。但在我的客户对象中,我有一个Address对象,并且有一个浅拷贝,这两个对象将保持对该对象的相同引用。所以,当我从地址对象中更改一个字段时,原来的客户地址也会被更改。我想这样做我的客户地址的深层副本,但我不能让我的对象序列化(这不是在我的控制来改变模型对象)

  • 有没有办法做了深刻的副本,而不系列化?
  • 还是有一些标准的方式来完成我想要实现的行为?

回答

2

我会简单地回到数据库并重新加载客户对象。这可确保您显示的数据与数据库中的数据一致,并降低并发问题的风险。

+0

我没有这样想过,但在我看来这不是最佳做法?但我认为它肯定会为我做这项工作,我会尝试一下 – koala 2013-03-06 18:26:01

+0

IMO显示用户的新数据是最好的做法,除非有明显的性能原因否则。编码也更容易,并且更容易出错。 – 2013-03-06 18:30:49

+0

我试过了,但我注意到当我回到数据库时,我想让同一个对象拥有它的副本,看起来我没有第二个具有旧值的独立对象。我认为nhibernate知道我已经在使用这个对象,只是使用那个...对此有任何想法? – koala 2013-03-08 13:04:49