今天我发现了一个很棒的节目。
有一个班级
class Foo
{
classA property {get; set;}
classB property {get; set;}
classC property {get; set;}
}
A,B和C类中的每个类都有属于类的属性。所以,我的班级Foo非常嵌套。 claas Foo将参数传递给一个由ShowDialog()命令打开的选项窗口。
的ShowDialog() 结果错误 - > SelectedFoo = backup / result true - >离开方法
因此,如果用户取消选项窗口,则传递给SettingsWindow的ViewModel的SelectedFoo将被备份替换。嗯,从理论上讲。这些类都是引用类型,并且已经改变为MVVM中的数据绑定。所以我的备份也会改变。
如何阻止这种行为?有没有办法打破这两个类之间的联系?
答案 0 :(得分:2)
我可以想到几种方法。
来自回归的旧模式是深度克隆将当前设置转换为新对象,并且仅在用户点击应用时才应用新设置。这样它就不会影响系统的其余部分,直到它们“正常”为止。如果他们点击取消,则无法完成任何操作,因为我们没有覆盖任何内容。
另一个稍微复杂的替代方案是根据需要备份单个属性(可选择通过反射)。在此模式下,启动时不需要深度克隆。当用户进行更改时,会在设置新值之前记录旧值。如果用户决定取消,则回放所有更改,但这次将属性设置为先前值。