丢失焦点的WPF RaisePropertyChanged事件

本文关键字:RaisePropertyChanged 事件 WPF 焦点 | 更新日期: 2023-09-27 18:20:51

我有一个运行良好的C#WPF MVVM应用程序。

唯一的问题是当我修改一个文本框并点击菜单时。如果我在不单击另一个控件的情况下执行此操作,那么view->viewmodel事件永远不会被触发,因为文本框没有失去焦点。如果我错了,请纠正我,但我认为RaisePropertyChanged只在LostFocus(或OnBlur,或任何类似事件)上触发。

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

因此,恢复:

此序列运行良好:

  1. 编辑文本框
  2. 单击另一个控件
  3. RaisePropertyChanged被激发,视图模型被更新
  4. 点击菜单上的保存按钮
  5. 使用正确值保存的数据

这个序列给了我一个错误:

  1. 编辑文本框
  2. 点击菜单上的保存按钮
  3. 使用正确值保存的数据

如何解决这个问题?

丢失焦点的WPF RaisePropertyChanged事件

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

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

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

相关文章:
  • 没有找到相关文章