【问题标题】:Saving in a WPF data entry form保存在 WPF 数据输入表单中
【发布时间】:2012-01-12 02:27:17
【问题描述】:

我有一个 WPF MVVM 应用程序,其中包含一个带有多个文本框的数据输入表单。我注意到,当用户在文本框中并进行更改时,Context 对象不知道进行了更改,直到用户从该文本框中跳出。一旦用户跳出文本框,一切正常。但我想知道在用户不必关闭文本框的情况下进行了更改。

这可能吗?

我的表单的工作方式是保存和取消按钮绑定到 ICommands。这些命令有一个“CanSave”和“CanCancel”方法,用于检查 EntityState 是否发生了变化,但允许按钮启用。这很好用,但用户必须关闭文本框才能正常工作。

如何在不让用户关闭更改的文本框的情况下完成这项工作?

【问题讨论】:

    标签: wpf entity-framework mvvm


    【解决方案1】:

    将 TextBox 的绑定方向(模式)设置为 TwoWay 而不是默认值,并将 UpdateSourceTrigger 设置为 PropertyChanged 而不是默认值...像这样:

    <TextBox x:Name="txtPersonLastname" Text="{Binding Person.LastName, Mode=TwoWay, NotifyOnValidationError=True, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" />
    

    (我在这段摘录中有一些额外的属性可供验证。)

    关键区别在于 PropertyChanged 将更新您在 ViewModel 中的支持属性。当用户在 TextBox 中输入任何内容时,PropertyChanged 事件将触发,进而触发您的 CanSave、Save 例程。

    在 Blend 中,它应该如下所示:

    【讨论】:

      【解决方案2】:

      您必须更改更新源触发器属性以反映 ViewModel 中的更改

      举例

      <TextBox Text={Binding Path=MyProperty,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}></TextBox>
      

      不要忘记My Property 应该触发从 ViweModel 更改的属性

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-21
        • 2020-03-12
        • 1970-01-01
        • 1970-01-01
        • 2022-11-04
        • 1970-01-01
        相关资源
        最近更新 更多