C# MVVM模式下的数据验证方法

   2024-10-01 8270
核心提示:在C#中使用MVVM模式进行数据验证可以通过以下方法实现:使用INotifyDataErrorInfo接口:在ViewModel中实现INotifyDataErrorInfo

在C#中使用MVVM模式进行数据验证可以通过以下方法实现:

使用INotifyDataErrorInfo接口:在ViewModel中实现INotifyDataErrorInfo接口,并在属性的setter中进行数据验证,然后通过ErrorsChanged事件通知View。
public class ViewModel : INotifyDataErrorInfo{    private string _username;    public string Username    {        get { return _username; }        set        {            if (string.IsNullOrEmpty(value))            {                AddError("Username", "Username cannot be empty");            }            else            {                RemoveError("Username");            }            _username = value;            OnPropertyChanged("Username");        }    }    private Dictionary<string, List<string>> _errors = new Dictionary<string, List<string>>();    public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;    public IEnumerable GetErrors(string propertyName)    {        if (_errors.ContainsKey(propertyName))            return _errors[propertyName];        return null;    }    public bool HasErrors => _errors.Any();    private void AddError(string propertyName, string error)    {        if (!_errors.ContainsKey(propertyName))            _errors[propertyName] = new List<string>();        if (!_errors[propertyName].Contains(error))        {            _errors[propertyName].Add(error);            ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(propertyName));        }    }    private void RemoveError(string propertyName)    {        if (_errors.ContainsKey(propertyName))        {            _errors.Remove(propertyName);            ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(propertyName));        }    }    private void OnPropertyChanged(string propertyName)    {        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));    }}
使用IDataErrorInfo接口:ViewModel类实现IDataErrorInfo接口,对属性进行数据验证,并在Error属性中返回错误信息。
public class ViewModel : IDataErrorInfo{    private string _username;    public string Username    {        get { return _username; }        set        {            if (string.IsNullOrEmpty(value))            {                Error = "Username cannot be empty";            }            else            {                Error = null;            }            _username = value;            OnPropertyChanged("Username");        }    }    public string Error { get; private set; }    public string this[string columnName]    {        get        {            switch (columnName)            {                case "Username":                    if (string.IsNullOrEmpty(Username))                        return "Username cannot be empty";                    break;            }            return null;        }    }    private void OnPropertyChanged(string propertyName)    {        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));    }}

这样在View中绑定ViewModel的属性时,会实时进行数据验证,并显示错误信息。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号