wpf - 在向用户呈现验证错误之前创建延迟

标签 wpf data-binding mvvm

在这个遵循 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/

相关文章:

c# - MVVM 和异步数据访问

javascript - 这个 Angular 代码有什么问题?

wpf - MVVM 模式 : ViewModel updates after Model server roundtrip

wpf 数据绑定(bind)到对象

WPF 按钮命令绑定(bind)已刷新,但按钮仍处于禁用状态

wpf - 如何通过在 WPF 中绑定(bind)来设置复选框内容的背景颜色

c# - 如何在 PRISM 模块中使用 ReactiveUI

c# - Visual C# .net 2013 和线程操作指南

wpf - 关闭命令 WPF

c# - Wpf Observable 集合和 DataGrid 不更新更改