wpf - 如何使用双向绑定(bind)回滚 Silverlight 3 中对对象所做的更改

标签 wpf silverlight silverlight-3.0 binding

我有一个 Silverlight 3 项目。我有一个文本框,它是绑定(bind)到对象的双向数据。如果用户想取消他们对文本框所做的更改,撤消对对象上绑定(bind)字段的更改的最佳方法是什么?

我知道我可以在加载对象时将初始值存储在一个单独的变量中,但我想知道是否有更好的方法来做到这一点?

谢谢。

最佳答案

IEditableObject 的示例实现在 MSDN (here) 上显示了一种非常简单的方法来完成它。我认为这个实现更清晰一些,但另一方面微软可能测试了他们的:

public class MyObject : ViewModelBase, IEditableObject
{
   private struct MyData
   {
      string Foo,
      string Bar
   };

   private MyData Saved = new MyData()
   private MyData Current = Saved;

   public string Foo
   {
      get { return Current.Foo; }
      set
      {
         Current.Foo = value;
         OnPropertyChanged("Foo");
      }
   }

   public string Bar
   {
      get { return Current.Bar; }
      set
      {
         Current.Bar = value;
         OnPropertyChanged("Bar");
      }
   }


   public void BeginEdit() 
   { 
      if (Current == Saved)
      {
         Current = new MyData(); 
         Current.Foo = Saved.Foo;
         Current.Bar = Saved.Bar;
      }
   }

   public void CancelEdit() 
   {
      if (Current != Saved)
      { 
         Current = Saved;
         OnPropertyChanged("Foo");
         OnPropertyChanged("Bar");
      }
   }

   public void EndEdit()
   {
      if (Current != Saved)
      {
         Saved = Current;
      }
   }
}

使用此模式,Current始终包含对象的当前值,而不管其编辑状态如何,这使得属性访问器易于实现; IEditableObject方法只是切换什么Current是。

即使是大量的属性,实现也相当容易;你只需要确保更新BeginEditCancelEdit当您添加新属性时。

关于wpf - 如何使用双向绑定(bind)回滚 Silverlight 3 中对对象所做的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2282313/

相关文章:

ios - 与 Silveright 和 iPad 客户端一起使用的推荐绑定(bind)是什么

从列表框项目模板中的按钮调用 Silverlight 命令

c# - 如何在 MVVM 中处理动态按钮中的执行和可以执行条件

具有多个图像的 WPF DataGrid RowDetailsTemplate (MVVM)

silverlight - 浏览器外的 Silverlight 应用程序 - 如何设置自动更新?

asp.net - 如何在 Silverlight 3 对象上调用 javascript 函数?

xaml - 无法访问 Silverlight 类库中的字体资源

c# - 类返回的默认值

c# - MVVM 关闭文档的方式可以取消

silverlight-3.0 - 从浏览器中打开 silverlight 页面