情况如下:我有一个编辑器应用程序,它编辑了一些分层数据。数据本身保存在ViewModel类中,而View类负责反映ViewModel中的更改。 View的主要部分是ContentControl。当ViewModel中的数据发生更改时,(重新)生成控件的层次结构,顶级控件成为ContentControl的内容。当然,这些分层控件具有绑定。 现在是关闭编辑器的时候了。 ViewModel对命令作出反应并清除数据。引发PropertyChanged并且View已准备好做出反应:它尝试执行
myContentControl.Content = null;
但这就是陷阱所在:WPF从ContentControl的可视化树中分离出控件的hieararchy并重新评估绑定。但是数据已经被破坏了!
我该怎么办?为什么WPF更新对可视树 out 的控件的绑定?当然我可以对空值进行额外的检查,但有没有办法在半死控件上完全不进行绑定?
答案 0 :(得分:1)
每当我们有一个允许用户编辑对象的UI,但也提供了保存或取消的可能性时,我们只需要为该视图使用另一个视图模型类。
因此,编辑开始时,您将当前对象中的字段复制到视图模型中的可编辑属性。然后,我们让用户编辑他们想要的内容。如果他们取消了操作,那么我们什么都不做,因为原始对象没有被触及。
但是,如果他们想要保存,那么我们会将编辑后的视图模型中的属性复制到原始对象并保存。然后可以不加重视地处理视图和视图模型。