91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

C# MVVM模式下的數據驗證方法

c#
小樊
86
2024-08-22 21:01:38
欄目: 編程語言

在C#中使用MVVM模式進行數據驗證可以通過以下方法實現:

  1. 使用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));
    }
}
  1. 使用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的屬性時,會實時進行數據驗證,并顯示錯誤信息。

0
永新县| 仙居县| 浠水县| 宝清县| 夏河县| 什邡市| 和龙市| 敦化市| 武定县| 洪泽县| 凤城市| 开阳县| 阿克苏市| 利辛县| 石泉县| 滁州市| 屏山县| 鄂温| 吕梁市| 公安县| 渑池县| 剑阁县| 菏泽市| 兴山县| 邹平县| 海林市| 曲沃县| 台东县| 麻栗坡县| 泸水县| 蓬莱市| 杭锦旗| 文化| 博白县| 丽水市| 福贡县| 新泰市| 阿合奇县| 张家界市| 徐汇区| 西昌市|