我有一个WPF MVVM应用程序,其中包含带有多个文本框的数据输入表单。我注意到当用户在文本框中并进行更改时,Context对象不知道在用户选中该文本框之前进行了更改。一旦用户选中文本框,一切正常。但我想知道在没有用户必须关闭文本框的情况下进行了更改。
这可能吗?
我的表单的工作方式是“保存”和“取消”按钮绑定到ICommands。这些命令具有“CanSave”和“CanCancel”方法,该方法检查EntityState是否仍然改变但允许按钮启用。这很好用,但用户必须在文本框中选中标签以使其正常工作。
如果没有用户选中已更改的文本框,我怎样才能完成这项工作?
答案 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中,它应如下所示:
答案 1 :(得分:1)
您必须更新更新源触发器属性以重新链接ViewModel中的chages
例如
<TextBox Text={Binding Path=MyProperty,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}></TextBox>
不要忘记My Property
应该触发ViweModel改变的属性