当点击listviewitem时,我有一个列表视图中显示的模型列表我打开一个绑定到listviewitem数据模型的对话框,允许用户编辑各种属性。
我想知道如何处理确定和取消按钮。一方面,如果我将对话框直接绑定到listviewitem的模型,似乎没有办法取消操作。
另一方面,如果我给对话框一个克隆(由于模拟可复制的开销而不是那么笨),而不是真正的一个取消很容易处理,但是将新数据转换为现有的模型很痛苦因为我必须经历并将克隆中的所有属性复制回原始模型。
我怀疑这有一个很好的设计模式。有什么想法吗?
答案 0 :(得分:2)
您可以将所有绑定更改为“显式”,因为它们不会自动将值推回源,然后在单击“确定”按钮时强制它们更新。
例如,让我们使用显式更新模式将TextBox绑定到模型的“Foo”属性:
<TextBox x:Name="fooEdit" Text="{Binding Foo,UpdateSourceTrigger=Explicit}" />
然后单击确定按钮时:
BindingExpression be = fooEdit.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();
如果你有很多控件,这可能有点麻烦,但它可以让你完全控制从绑定控件更新底层属性的时间。
<强>更新强>
我应该补充一点,您还应该查看IEditableObject界面,该界面是为您描述的场景设计的。如果您可以在您的模型或中间ViewModel上实现它,那将使生活变得更加轻松。