WPF中应使用哪个事件从TextBox(LostFocus,LostekeyboardFocus等)中更新模型?如何在WPF中设置事件的优先级?

StackOverflow https://stackoverflow.com/questions/4447645

我有一个应用程序,其中有很多文本框和一些按钮,例如保存,saveas等。

用户编辑文本框时,我必须检查数据库是否有一定范围,验证范围并更新数据库。如果用户输入的值有任何错误,那么我不应允许文本框失去焦点。

我正在使用LostFocus活动 为此,直到我最近发现了一个错误,直到我的应用程序中有一个错误。

漏洞 : 用户在文本框中编辑一个值,然后单击“保存”按钮;没有调用LostFocus事件,因此数据库没有更新:(

现在我的问题是我应该在文本框中使用哪个事件来更新数据库。我尝试了文本变化的事件,但它验证了每个角色并使我的应用程序慢慢。我对选择此类应用程序的合适事件感到困惑!

笔记 :**按钮在不同的UserControl中!

编辑1: 我有一些命令附加到单击按钮,这些命令在LostFocus之前被执行!!我可以设置优先级,或者在Lostfocus之后应执行诸如附件或命令之类的东西!

编辑2: 我只是通过禁用某些命令来调试应用程序,在某些情况下,我发现的是,在LostFocus之前,授权委员会被执行,因此我想避免使用。我该怎么做?在开发过程中,我感到无法开发纯MVVM应用程序,因此我有点使用CodeBehind!

有帮助吗?

解决方案

将键盘焦点捕获在控件中通常是UI设计不良的迹象 - 用户托管迫使用户在控件中固定数据,然后他才能在UI中键入其他任何地方。

也就是说,您根本不应该在这里使用活动。您正在尝试在WPF中编写Windows表单应用程序。您应该编写WPF应用程序。

创建一个是您视图的逻辑模型的类 - 即有一个 string 文本框的属性和 Command 财产(或更可能是 RelayCommand)用于保存按钮。将文本框绑定到字符串属性,例如:

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

因为 UpdateSourceTriggerPropertyChanged, ,每次用户键入字符时,源对象都会更新。

将按钮绑定到命令属性,例如:

<Button CommandBinding="{Binding SaveCommand}">Save</Button>

实施适当的 CanSaveSave 方法 RelayCommand (如所述 乔什·史密斯(Josh Smith)的 关于MVVM模式的基本文章)需要,因此当字符串属性有效和禁用时,启用了按钮。

其他提示

我认为最好的方法是防止用户继续进行,直到收集所有有效的信息为止。

就像安装向导 Terms & Conditions DialogNext 按钮。直到您检查 I Agree 复选框, Next 按钮被禁用。

这样,您就不必担心用户在不提供有效信息的情况下进行操作。这样,您可以使用任何事件 TextBox 验证您的数据。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top