C# Windows phone 8延迟输入验证
在将数据发送到API服务器之前,我想验证几个输入框。我想在您键入时进行验证,但如果我一直告诉您您的用户名太短,而您刚刚开始键入它,这会让人恼火。我也不想在每次按键时都重新验证,因为下一次按键会使它失效 我在Android上做的是,我有一个C# Windows phone 8延迟输入验证,c#,validation,windows-phone-8,C#,Validation,Windows Phone 8,在将数据发送到API服务器之前,我想验证几个输入框。我想在您键入时进行验证,但如果我一直告诉您您的用户名太短,而您刚刚开始键入它,这会让人恼火。我也不想在每次按键时都重新验证,因为下一次按键会使它失效 我在Android上做的是,我有一个处理程序,其中有许多验证代码,每个代码对应一个需要验证的字段。每次该字段更改时,我都会清除队列中具有匹配字段ID的所有消息,并以750ms的延迟将新消息放入队列。750ms启动后,将调用我的处理程序对与消息ID关联的字段执行验证。这允许我仅在用户停止在该字段中键
处理程序
,其中有许多验证代码,每个代码对应一个需要验证的字段。每次该字段更改时,我都会清除队列中具有匹配字段ID的所有消息,并以750ms的延迟将新消息放入队列。750ms启动后,将调用我的处理程序对与消息ID关联的字段执行验证。这允许我仅在用户停止在该字段中键入至少750ms后执行验证。这也意味着如果用户键入10个字符
在750ms暂停之前,我只验证一次
在Windows Phone 8(C#)上有推荐的方法吗
我基本上需要一种低开销的方式来排队等待任务的延迟执行,并能够取消/重新安排任务
大多数验证发生在设备上,可以在UI线程上执行,但需要针对服务器验证一个字段,因此它必须在BG线程上运行(例如,此用户名可用吗?)。如果将文本框(文本)绑定到视图模型中的属性,则默认情况下,在文本框失去焦点之前不会进行绑定
因此,如果您使用的是推荐的绑定技术,则可以在更新视图模型中的属性时调用验证代码。问题在于,在用户离开文本框之前,不会进行任何验证。设想一个注册页面,默认情况下该按钮处于禁用状态。用户填写这些框并保留在最后一个输入框中。除非用户离开该字段,否则该按钮永远不会启用。然后,唯一的选项变成
LostFocus
事件,这将触发上面提到的太多验证事件。您可以将LostFocus更改为PropertyChanged,但这将导致您进入初始状态