WPF:在列表框中停止或撤消选择更改

时间:2009-09-17 08:42:05

标签: wpf data-binding listbox

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

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

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

“CurrentSelection”项目是数据绑定。

我以为我可以在CurrentSelection属性的“setter”部分处理这个问题。如果用户选择“取消”,我只需按原样保留CurrentSelection项,然后触发PropertyChanged通知事件,告诉表单更新回旧的所选项目。控件忽略此通知事件。 (这是有道理的,控制说“我知道当前的选择已经改变。我只是改变了它!”)

任何想法如何解决这个问题?总之,控件尝试更改绑定的SelectedItem,我想告诉它“不,你现在不能改变这个选定的项目。”

3 个答案:

答案 0 :(得分:3)

要做Kent Boogaart所指出的,请参阅此回复..

How to stop a WPF binding from ignoring the PropertyChanged event that it caused?

答案 1 :(得分:1)

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

答案 2 :(得分:1)

这听起来像是在寻找纪念品模式:

http://en.wikipedia.org/wiki/Memento_pattern

希望这有帮助。