PropertyChangedCallback在绑定的ComboBox中显示新值之前触发

时间:2014-05-12 16:48:59

标签: c# wpf combobox dependency-properties

我将DependencyProperty绑定到ComboBox。

public static readonly DependencyProperty SelectedItemProperty =
       DependencyProperty.Register("SelectedItem",
       typeof(MyViewModel), typeof(MySelectionViewModel),
       new UIPropertyMetadata(null, new  PropertyChangedCallback(OnSelectedXyPropertyChanged)));

一切正常,但在OnSelectedXyPropertyChanged中显示MessageBox时,后面的组合框显示旧值。我希望显示新值,因为我认为如果用户看到旧值和与新值对应的消息,将会感到困惑。

private static void OnSelectedXyPropertyChanged (DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
   ...
   MessageBoxResult result = MessageBox.Show("Ask something", "Caption", MessageBoxButton.YesNo);
   ...
}

如何更改以获得预期的行为?

1 个答案:

答案 0 :(得分:0)

是的,如果用户界面不一致,用户将有破坏性的经历......

打开消息框是线程生命周期中的模态事件,因此线程被阻塞,直到消息框关闭。在您的情况下,在WPF绑定引擎是参与者的事件管道期间引发消息框,因此在消息框关闭之前UI不会更新。

解决此问题的最快方法是通过Dispatcher安排消息框。这将允许事件管道完成。对此的指示性代码是......

Application.Current.Dispatcher.BeginInvoke(...)

执行此操作会将代理置于优先级队列中,该队列将在时间正确的情况下执行'