丢失焦点的WPF RaisePropertyChanged事件

时间:2013-07-03 20:56:37

标签: c# wpf mvvm

我有一个C#WPF MVVM应用程序可以正常工作。

唯一的问题是当我修改文本框并单击菜单时。如果我这样做而不点击另一个控件,则视频 - > viewmodel事件永远不会被触发,因为文本框没有失去焦点。如果我错了,请纠正我,但我认为RaisePropertyChanged仅在LostFocus(或OnBlur或任何类似事件)上触发。

因此,在编辑文本框后立即单击菜单保存按钮会导致视图模型使用旧值保存数据。

所以,恢复:

这个序列工作正常:

  1. 编辑文本框
  2. 点击其他控件
  3. 触发了RaisePropertyChanged,更新了视图模型
  4. 点击菜单上的保存按钮
  5. 使用正确的值保存数据
  6. 这个序列给了我一个错误:

    1. 编辑文本框
    2. 点击菜单上的保存按钮
    3. 使用正确的值保存数据
    4. 如何解决这个问题?

2 个答案:

答案 0 :(得分:11)

这是WPF和WinForms中TextBoxes的常见问题。您可以通过指示绑定系统在每次更改TextBox而不是失去焦点时更新VM来解决此问题。为此,请将绑定的UpdateSourceTrigger设置为PropertyChanged。只要TextBox为其PropertyChanged属性引发Text事件,这将写回VM。

<TextBox Text="{Binding MyText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

答案 1 :(得分:8)

对于TextBox.Text依赖项属性,其默认UpdateSourceTriggerLostFocus(即,当控件失去焦点时,您的视图模型属性会更新)。要在输入文本时立即更新属性,请设置UpdateSourceTrigger=PropertyChanged。 (有关详细信息,请参阅上面的链接 - 它实际上专门涵盖了您的示例。)