想象一下:您有一个Master-Child窗口,其中包含一个项目列表(主窗口)和一组控件,您可以在其中编辑当前选定的项目(子窗口)。子窗口有“应用”和“取消”按钮。
用户开始编辑值。然后他按下“应用”按钮之前更改选择。
您的应用程序会显示一条消息“对当前项目应用更改?”,按钮为“是”,“否”和“取消”。 如果用户按下“取消”,则尝试更改当前选择将失败。
“CurrentSelection”项目是数据绑定。
我以为我可以在CurrentSelection
属性的“setter”部分处理这个问题。如果用户选择“取消”,我只需按原样保留CurrentSelection
项,然后触发PropertyChanged
通知事件,告诉表单更新回旧的所选项目。控件忽略此通知事件。 (这是有道理的,控制说“我知道当前的选择已经改变。我只是改变了它!”)
任何想法如何解决这个问题?总之,控件尝试更改绑定的SelectedItem
,我想告诉它“不,你现在不能改变这个选定的项目。”
答案 0 :(得分:3)
要做Kent Boogaart所指出的,请参阅此回复..
How to stop a WPF binding from ignoring the PropertyChanged event that it caused?
答案 1 :(得分:1)
只是没有测试它的想法:尝试在单独的消息中提升属性更改事件。该列表可能有一个锁存器,可以在更改属性值时忽略任何通知。如果您发送包含通知的单独消息,则应重置锁存器并应该处理它。
答案 2 :(得分:1)