还原对象是用户在WPF中单击"取消"

Pho*_*per 8 wpf

我有一个窗口作为WPF应用程序中的对话框.该对话框有一个"确定"和一个"取消"按钮.我将Window的DataContext设置为我的应用程序中的对象实例.用户可以在Window中更改对象属性的值.如果用户单击"取消",我想将属性值恢复为原始值.在WPF中有一种简单的方法吗?

例如,我知道RIA数据服务有RejectChanges.在WPF的客户端是否有类似的东西?

谢谢!

sll*_*sll 3

在设置为 DataContext 的对象中(理想情况下它应该是 MVVM 方法中的 ViewModel)公开两个命令

public ICommand CancelCommand { get; set; }
public ICommand OkCommand { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后为按钮分配这些命令,如下所示

<Button Command="{Binding CancelCommand}" ... />
Run Code Online (Sandbox Code Playgroud)

您必须保留对象的两个副本,应该通过深层复制创建一个副本,或者如果对象具有一些可编辑字段,您可以将它们保留为类字段。基本上在初始化阶段备份可编辑对象属性,然后绑定到DataContext对象的可编辑版本。在取消命令处理程序中 - 从备份副本恢复...

  • .NET 正是为此目的定义了“IEditableObject”接口。当对话框打开时,您将调用“BeginEdit”。当它关闭时,您可以根据单击的按钮调用“EndEdit”或“CancelEdit”。 (4认同)
  • 优点(除了标准之外)是支持“IEditableObject”的控件(例如“DataGrid”)将自动代表您调用它。您可以为对话框创建自己的基类,该基类也查找“IEditableObject”并根据需要调用其方法。否则,您可以让虚拟机执行此操作 - 打开对话框的命令将调用 BeginEdit,并且根据对话框结果调用其他两种方法之一。您可以通过窗口管理服务来完成所有这些操作,以使您的虚拟机独立于任何视图问题。 (3认同)