丢失焦点的WPF RaisePropertyChanged事件

gui*_*cgs 6 c# wpf mvvm

我有一个C#WPF MVVM应用程序,工作正常.

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

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

所以,恢复:

这个序列工作正常:

  1. 编辑文本框
  2. 单击另一个控件
  3. 触发RaisePropertyChanged,更新viewmodel
  4. 单击菜单上的"保存"按钮
  5. 数据使用正确的值保存

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

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

怎么解决这个?

Mic*_*ter 11

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

<TextBox Text="{Binding MyText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
Run Code Online (Sandbox Code Playgroud)


McG*_*gle 8

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