保存在WPF数据输入表单中

时间:2012-01-12 02:27:18

标签: wpf entity-framework mvvm

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

这可能吗?

我的表单的工作方式是“保存”和“取消”按钮绑定到ICommands。这些命令具有“CanSave”和“CanCancel”方法,该方法检查EntityState是否仍然改变但允许按钮启用。这很好用,但用户必须在文本框中选中标签以使其正常工作。

如果没有用户选中已更改的文本框,我怎样才能完成这项工作?

2 个答案:

答案 0 :(得分:1)

将TextBox的绑定方向(Mode)设置为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中,它应如下所示:Blend 4 Text Binding

答案 1 :(得分:1)

您必须更新更新源触发器属性以重新链接ViewModel中的chages

例如

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

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