【问题标题】:deterministic and asynchronous field validation in WPFWPF 中的确定性和异步字段验证
【发布时间】:2011-09-02 09:00:42
【问题描述】:

在我基于 MVVM 的应用程序中,我需要验证数据条目中的字段。如果可能,我想将标准 WPF 验证绑定与 ErrorTemplates 一起使用。

但是,出于以下原因,我希望验证逻辑的执行完全由 ViewModel 驱动/触发(推送到视图,而不是由视图拉动):

  1. 它必须异步工作,因为验证逻辑可能需要一段时间才能执行。
  2. 当要执行验证逻辑时(例如,仅在用户单击“应用”或内部状态发生变化导致条目突然变为无效时),我需要更加确定性和细粒度。

我知道 Silverlight 有 INotifyDataErrorInfo 正是为此目的而引入的,但 WPF 没有。我怎样才能让我的验证逻辑仍以确定性和异步方式执行?

【问题讨论】:

标签: wpf validation binding mvvm


【解决方案1】:

我在您的另一个问题上发布了一个答案,显然也回答了这个问题。

Create a visualtree off of a control template in code

【讨论】:

    【解决方案2】:

    WPF 和 Silverlight 的内置验证用于快速客户端验证(例如正则表达式、解析值等)。

    如果您需要到服务器执行验证(或验证需要很长时间),我会以自定义方式进行。比如点击保存按钮时等。

    假设你在 ViewModel 中有一个 Save 方法(你没有提到你使用的是哪个 MVVM 框架):

    public void Save()
    {
         //Do your validation, this might start a new thread (I use Async CTP myself)
    
         //If validation is good, do your extra work, else display validation errors
    }
    

    我会在你的 ViewModel 中的一个动作中完成所有需要的工作

    【讨论】:

    • 所以你是说,我不能使用ErrorTemplates?我需要依赖他内置的 WPF 和自定义控件的错误模板。例如我想在无效文本框周围显示标准红色边框。如何强制显示此边框?
    • 我建议使用这里的最佳答案建议的方法:stackoverflow.com/questions/921601/…。如果需要长时间运行的操作(它总是会锁定 UI),我认为使用内置验证不是一个好主意。
    • 我仍然需要实现某种“ErrorTemplate”并在 VM 引发事件时显示它。由于不幸的是我的一些表单有很多字段,我不希望错误视觉效果立即成为视觉树的一部分,但只有在该字段发生验证错误时才应该创建(例如通过行为):查看更多我的后续问题中的信息:stackoverflow.com/questions/7293277/…
    猜你喜欢
    • 2014-03-01
    • 2015-01-20
    • 2019-04-26
    • 1970-01-01
    • 2019-07-08
    • 2020-10-20
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多