gpt4 book ai didi

c# - 单击取消按钮时如何回滚 WPF 子窗口中更改的数据

转载 作者:太空宇宙 更新时间:2023-11-03 23:12:48 25 4
gpt4 key购买 nike

好吧,假设我们有一个 Parent Window 绑定(bind)到 DataContext 现在假设我们触发一个 Child Window 并将其数据上下文设置为父窗口的。现在,子窗口中的项目以 TwoWay 模式绑定(bind)到数据上下文。当用户在此子窗口中更改某些内容时,源 View 模型中的数据将被更新。但是,如果用户使用 DialogResult == false 关闭窗口怎么办?如何回滚到原来的数据?

现在我在 OneWay 模式下绑定(bind)数据并仅在 DialogResult == true 时应用更改。但我想一定有更优雅的方式来做到这一点。

最佳答案

IEditableObject

就像 WPF 可以使用 System.ComponentModel.INotifyPropertyChanged 一样,您也可以使用接口(interface) System.ComponentModel.IEditableObject .该接口(interface)具有以下有用的方法:

在显示窗口之前,在数据上下文中调用 BeginEdit()。现在,任何更改都会通过通常的 INotifyPropertyChanged 反射(reflect)出来,以便父级照常接收更新。

如果用户取消,则调用 CancelEdit(),此时您的 View 模型应回滚更改。免费的牛排刀套装是通过 INotifyPropertyChanged 通知您的父窗口回滚,从而也“还原”父窗口。

否则调用 EndEdit() 老实说这不是必需的,因为更改已经完成。

显然,您需要以某种方式记住先前的值,以便您可以恢复任何更改。

IRevertibleChangeTracking

我刚刚阅读了有关 System.ComponentModel.IRevertibleChangeTracking 的内容,它提供了方法 AcceptChanges()RejectChanges()。尽管可以说这是用于接受回滚更改 的接口(interface),但尚不完全清楚在此期间所做的更改是否应在 WPF 方案中广播。也许有人可以在这里帮助我。

Tell me more...

关于c# - 单击取消按钮时如何回滚 WPF 子窗口中更改的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38432639/

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