C# 更新或刷新WPF应用程序以保存文本框输入

C# 更新或刷新WPF应用程序以保存文本框输入,c#,wpf,C#,Wpf,在我的WPF应用程序中,我有多个文本框或组合框等。用户可以输入。所有输入数据都绑定到viewmodel,以便在我的应用程序中实现更多功能 这里的问题是,用户编辑的最后一个表单(例如文本框)不会覆盖viewmodel中的数据,直到您在GUI中的其他位置按下,实际上“离开”了文本框。但我不能保证用户每次在按下下一个使用数据的应用程序功能按钮之前都会这样做。因此,有时这最后的变化没有考虑在内 有什么方法可以让应用程序“刷新”或取消对这些表单本身的关注吗?如果您必须执行这些操作,我建议您创建一个类,在每

在我的WPF应用程序中,我有多个文本框或组合框等。用户可以输入。所有输入数据都绑定到viewmodel,以便在我的应用程序中实现更多功能

这里的问题是,用户编辑的最后一个表单(例如文本框)不会覆盖viewmodel中的数据,直到您在GUI中的其他位置按下,实际上“离开”了文本框。但我不能保证用户每次在按下下一个使用数据的应用程序功能按钮之前都会这样做。因此,有时这最后的变化没有考虑在内


有什么方法可以让应用程序“刷新”或取消对这些表单本身的关注吗?

如果您必须执行这些操作,我建议您创建一个类,在每次
OnTextChanged
事件中调用该类。 这样,您的页面将刷新每次按键。

默认值为

<TextBox Text="{Binding YourProperty, UpdateSourceTrigger=PropertyChanged}"/>
每次击键后更新都会降低性能,并且在提交新值之前,用户通常没有机会退格并修复键入错误。因此,Text属性的默认UpdateSourceTrigger值是LostFocus,而不是PropertyChanged

在每个绑定中将其更改为,以便在每次击键时更新源

<TextBox Text="{Binding YourProperty, UpdateSourceTrigger=PropertyChanged}"/>


我建议您查看
OnTextChanged
或更好的
LostKeyboardFocus
事件。尝试将绑定上的属性
UpdateSourceTracger
设置为值
PropertyChanged
。这应该会有所帮助,因为文档中的
TextBox
属性的
Text
状态是否有一种通用的方法可以做到这一点?因为我有大约200个这样的数据绑定,每个都可能是用户编辑的最后一个。@Arne_22查看一个可能的解决方案,它按预期工作。是否有一种方法可以对所有绑定执行此操作,而不是手动为每个绑定分配属性?by@Ackdari展示了一种方法。就我个人而言,我认为这样做更复杂,并且与直接在绑定中分配更新触发器相比没有多大好处。然而,这两种方法都有优点和缺点,所以在它们之间进行选择可能是一个品味问题。