在这个遵循 MVVM 模式的特定 WPF 应用程序中, View 模型实现了 IDataErrorInfo 接口(interface)来通知 View 文本字段中的无效数据。
View 中存在一个文本框,您可以在其中输入卷。这已通过属性更改更新源指定,并验证数据错误:
<TextBox
Text="{Binding Volume, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
这样做的问题是您在用户完成输入之前收到验证错误。例如,有效值为“25 ml”。但是在用户输入最后一个“l”之前,文本框中会出现“25 m”。这不是一个有效值,将导致 IDataError 实现这样说。
结果是,当用户键入时,文本框周围会闪烁一个红色标记。
我们希望在红色标记出现在文本框周围之前有一点延迟(0.5 秒),所以我们可以假设用户在显示验证错误之前已经完成了输入。
第一次尝试是创建一个专门的文本框,在更新 View 模型中的属性之前等待 0.5 秒。但这并不好,因为如果用户确实输入了有效值,那么在启用提交按钮之前会经过 0.5 秒。
我有一个想法,你可以编写一个专门的绑定(bind)(即创建一个从 System.Windows.Data.Binding 派生的专门的类)来实现这种行为,但我不知道该怎么做。
这是一种合理的方法,还是有更好的方法?
最佳答案
听起来您可以使用 Paul Stovell 在博客中提到的自定义 DelayBinding。我已经成功地使用它来实现延迟搜索/过滤。你可以在这里读到它:
http://www.paulstovell.com/wpf-delaybinding
关于wpf - 在向用户呈现验证错误之前创建延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6483163/