gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:22:46 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com