丢失焦点的WPF RaisePropertyChanged事件
本文关键字:RaisePropertyChanged 事件 WPF 焦点 | 更新日期: 2023-09-27 18:20:51
我有一个运行良好的C#WPF MVVM应用程序。
唯一的问题是当我修改一个文本框并点击菜单时。如果我在不单击另一个控件的情况下执行此操作,那么view->viewmodel事件永远不会被触发,因为文本框没有失去焦点。如果我错了,请纠正我,但我认为RaisePropertyChanged只在LostFocus(或OnBlur,或任何类似事件)上触发。
因此,在编辑文本框后单击菜单保存按钮,会导致视图模型使用旧值保存数据。
因此,恢复:
此序列运行良好:
- 编辑文本框
- 单击另一个控件
- RaisePropertyChanged被激发,视图模型被更新
- 点击菜单上的保存按钮
- 使用正确值保存的数据
这个序列给了我一个错误:
- 编辑文本框
- 点击菜单上的保存按钮
- 使用正确值保存的数据
如何解决这个问题?
这是WPF和WinForms中TextBoxes的常见问题。您可以通过指示绑定系统在每次更改TextBox时更新VM,而不是在它失去焦点时更新。为此,请将绑定的UpdateSourceTrigger
设置为PropertyChanged
。每当TextBox为其Text
属性引发PropertyChanged
事件时,这将写回VM。
<TextBox Text="{Binding MyText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
对于TextBox.Text
依赖属性,其默认UpdateSourceTrigger
为LostFocus
(即,当控件失去焦点时,视图模型属性会更新)。若要在输入文本时立即更新特性,请设置UpdateSourceTrigger=PropertyChanged
。(有关更多信息,请参阅上面的链接——它实际上专门介绍了您的示例。)