丢失焦点的WPF RaisePropertyChanged事件
我有一个C#WPF MVVM应用程序,工作正常。
唯一的问题是当我修改文本框并单击菜单时。 如果我这样做而不点击另一个控件,则video – > viewmodel事件永远不会被触发,因为文本框没有失去焦点。 如果我错了,请纠正我,但我认为RaisePropertyChanged仅在LostFocus(或OnBlur或任何类似事件)上触发。
因此,在编辑文本框后立即单击菜单保存按钮会导致视图模型使用旧值保存数据。
所以,恢复:
这个顺序很好:
- 编辑文本框
- 单击另一个控件
- 触发RaisePropertyChanged,更新viewmodel
- 单击菜单上的“保存”按钮
- 数据使用正确的值保存
这个序列给了我一个错误:
- 编辑文本框
- 单击菜单上的“保存”按钮
- 数据使用正确的值保存
怎么解决这个?
这是WPF和WinForms中TextBox的常见问题。 您可以通过指示绑定系统在对TextBox进行每次更改而不是失去焦点时更新VM来解决此问题。 为此,请将绑定的UpdateSourceTrigger
设置为PropertyChanged
。 每当TextBox为其Text
属性引发PropertyChanged
事件时,这将写回VM。
对于TextBox.Text
依赖项属性,其默认UpdateSourceTrigger
是LostFocus
(即,当控件失去焦点时,您的视图模型属性会更新)。 要在输入文本时立即更新属性,请设置UpdateSourceTrigger=PropertyChanged
。 (有关详细信息,请参阅上面的链接 – 它实际上专门涵盖了您的示例。)