在Prism.Wpf中没有实现ValidatableBindableBase吗?为什么呢?

时间:2016-11-20 11:32:00

标签: wpf prism prism-6

尝试合并ValidatableBindableBase以便于验证实施,我注意到它在Prism.Wpf中不可用。

可在Prism.Windows(Windows 10 UWP)中使用,但是......

我可以错过它(那时它在哪里)?

或者它真的没有在WPF中实现(那么为什么)?

1 个答案:

答案 0 :(得分:1)

Prism.Wpf中的验证是通过实现IDataErrorInfoINotifyDataErrorInfo接口完成的。一个例子:

public abstract class DomainObject : INotifyPropertyChanged, INotifyDataErrorInfo
{
    private ErrorsContainer<ValidationResult> errorsContainer =
                    new ErrorsContainer<ValidationResult>(
                       pn => this.RaiseErrorsChanged( pn ) );

    public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;

    public bool HasErrors
    {
        get { return this.ErrorsContainer.HasErrors; }
    }

    public IEnumerable GetErrors( string propertyName )
    {
        return this.errorsContainer.GetErrors( propertyName );
    }

    protected void RaiseErrorsChanged( string propertyName )
    {
        var handler = this.ErrorsChanged;
        if (handler != null)
        {
            handler(this, new DataErrorsChangedEventArgs(propertyName) );
        }
    }
   ...
}

这也在Prism的documentation中解释。

那么为什么UWP不会那样工作呢?因为在UWP上,您无法访问这些界面,因此需要ValidatableBindableBaseBindableValidator类。如果由于某种原因,您喜欢这种方法,那么没有什么可以阻止您使用UWP类并将它们带到您的WPF解决方案中,所有代码都是open source