【问题标题】:WPF RaisePropertyChanged event on lost focus失去焦点时的 WPF RaisePropertyChanged 事件
【发布时间】:2013-07-03 20:56:36
【问题描述】:

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

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

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

所以,继续:

这个序列工作正常:

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

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

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

如何解决?

【问题讨论】:

    标签: c# wpf mvvm


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 2010-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-25
        相关资源
        最近更新 更多