WPF异步验证的最佳实践是什么?

3
有没有关于在WPF中执行异步MVVM验证的建议?已经阅读了有关INotifyDataErrorInfo的内容,但不幸的是它只适用于Silverlight。
谢谢。
1个回答

1

IDataErrorInfo是WPF的数据验证机制。你不是很喜欢微软的一贯性吗?;)

像这样在您的ViewModel上实现IDataErrorInfo:

public class MyViewModel : IDataErrorInfo
{
       public string Error
        {
            get { 
              return  GetErrorStringForThisViewModelInGeneral();
            }
        }

        public string this[string columnName]
        {
            get
            {
                string result = null;

                switch (columnName)
                {
                    case "Quantity":
                        if (Quantity <= 0)
                            result = "Quantity must be greater than 1.";
                    break;
                }
                return result;
            }

}

在属性(也称为this[])验证中,您可以使用EnterpriseLibrary中的验证器、使用属性的自定义验证器或任何您喜欢的东西。我只是展示了一个基本实现来帮助您入门。


抱歉,我指的是异步验证 - 即通过 Web 服务对数量进行验证。 - Alberto
3
为了使验证异步化,你应该开启一个线程进行验证(以避免挂起应用程序),然后当结果返回时,在被验证的属性上执行 NotifyPropertyChanged 操作(例如 Quantity)。当 Notify 发生时,WPF 将重新验证字段,并且你应该能够设置条件,以便它不会远程重新验证(因为自上次验证以来值没有改变)。 - Bahri Gungor
这正是我所想的 - 可惜它需要如此多的样板代码 :( - Alberto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接