WPF:停止或反转列表框中的选择更改

WPF:停止或反转列表框中的选择更改,wpf,data-binding,listbox,Wpf,Data Binding,Listbox,想象一下:您有一个主-子窗口,由一个项目列表(主窗口)和一组控件组成,您可以在其中编辑当前选定的项目(子窗口)。子窗口有“应用”和“取消”按钮 用户开始编辑值。然后,他在按下“应用”按钮之前更改选择 您的应用程序将显示一条消息“将更改应用于当前项目?”,按钮为“是”、“否”和“取消”。 如果用户按下“取消”,则更改当前选择的尝试将失败 “CurrentSelection”项是数据绑定的 我想我可以在CurrentSelection属性的“setter”部分处理这个问题。如果用户选择“取消”,我只

想象一下:您有一个主-子窗口,由一个项目列表(主窗口)和一组控件组成,您可以在其中编辑当前选定的项目(子窗口)。子窗口有“应用”和“取消”按钮

用户开始编辑值。然后,他在按下“应用”按钮之前更改选择

您的应用程序将显示一条消息“将更改应用于当前项目?”,按钮为“是”、“否”和“取消”。 如果用户按下“取消”,则更改当前选择的尝试将失败

“CurrentSelection”项是数据绑定的

我想我可以在
CurrentSelection
属性的“setter”部分处理这个问题。如果用户选择“取消”,我只需保持
CurrentSelection
项目的原样,并触发
PropertyChanged
通知事件,通知表单更新回旧的选定项目。控件将忽略此通知事件。(这很有道理,控件说“我知道当前选择已更改。我刚刚更改了它!”)


有没有办法解决这个问题?总之,控件尝试更改绑定的
SelectedItem
,我想告诉它“不,您现在不能更改此选定项”。

只是一个没有测试的想法:尝试在单独的消息中引发属性更改事件。列表可能有一个闩锁,在更改属性值时可以忽略任何通知。如果您发送包含通知的单独消息,则应重置闩锁并进行处理。

这听起来像是在寻找memento模式:


希望这能有所帮助。

要做Kent Boogaart指出的事情,请参阅此回复