打破两个班级之间的参考

时间:2018-03-09 14:27:48

标签: c# mvvm

今天我发现了一个很棒的节目。

有一个班级

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中的数据绑定。所以我的备份也会改变。

如何阻止这种行为?有没有办法打破这两个类之间的联系?

1 个答案:

答案 0 :(得分:2)

我可以想到几种方法。

来自回归的旧模式是深度克隆将当前设置转换为新对象,并且仅在用户点击应用时才应用新设置。这样它就不会影响系统的其余部分,直到它们“正常”为止。如果他们点击取消,则无法完成任何操作,因为我们没有覆盖任何内容。

另一个稍微复杂的替代方案是根据需要备份单个属性(可选择通过反射)。在此模式下,启动时不需要深度克隆。当用户进行更改时,会在设置新值之前记录旧值。如果用户决定取消,则回放所有更改,但这次将属性设置为先前值。