我有一个C#WPF MVVM应用程序可以正常工作。
唯一的问题是当我修改文本框并单击菜单时。如果我这样做而不点击另一个控件,则视频 - > viewmodel事件永远不会被触发,因为文本框没有失去焦点。如果我错了,请纠正我,但我认为RaisePropertyChanged仅在LostFocus(或OnBlur或任何类似事件)上触发。
因此,在编辑文本框后立即单击菜单保存按钮会导致视图模型使用旧值保存数据。
所以,恢复:
这个序列工作正常:
这个序列给了我一个错误:
如何解决这个问题?
答案 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
依赖项属性,其默认UpdateSourceTrigger
为LostFocus
(即,当控件失去焦点时,您的视图模型属性会更新)。要在输入文本时立即更新属性,请设置UpdateSourceTrigger=PropertyChanged
。 (有关详细信息,请参阅上面的链接 - 它实际上专门涵盖了您的示例。)