1

嗨,我对模型类中的错误进行了验证。

 public class CurrentUser:IDataErrorInfo, INotifyPropertyChanged
    {
//...

        private string _validationResult;
        private string _nick;

        public string Nick
        {
            get { return _nick; }
            set
            {
                _nick = value;
                NotifyPropertyChanged("Nick");
            }
        }

        public string ValidationResult
        {
            get { return _validationResult; }
            private set
            {
                _validationResult = value;
                NotifyPropertyChanged("ValidationResult");
            }
        }

        #region Implementation of INotifyPropertyChanged

        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }

        #endregion

        #region Implementation of IDataErrorInfo

        private string NickValid()
        {
            if (string.IsNullOrEmpty(Nick))
            {
                return NickNull;
            }
            if (Regex.IsMatch(Nick, "[^a-zA-Z0-9-_.]"))
            {
                return NickInvalidCharacters;
            }
            return string.Empty;
        }

        public string Error
        {
            get { throw new NotImplementedException(); }
        }

        public string this[string propertyName]
        {

            get
            {
                ValidationResult = string.Empty;

                switch (propertyName)
                {
                    case "Nick":
                        ValidationResult = NickValid();
                        break;
                    default:
                        break;
                }
                return ValidationResult;

            }
        }

        #endregion

    }

我在视图模型中使用这个模型类,并将模型类的 Nick 属性绑定到组合框控件的 Text 属性。

此外,我在视图中的按钮单击事件上从视图模型类绑定方法 LogOn。如果模型类中的验证有错误,我想禁用按钮:

查看型号:

[Export(typeof(ILogOnViewModel))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class LogOnViewModel : Screen, ILogOnViewModel,
    IPartImportsSatisfiedNotification
{

    public CurrentUser CurrentUser { get; set; }

    public bool CanLogOn
    {
        get
        {
            return string.IsNullOrWhiteSpace(CurrentUser.ValidationResult);
        }
    }

     //bind on button click event
    public void LogOn()
    {}
 }

如果 CurrentUser(对象)属性中的验证有错误,则解决方案很简单,将 CanLogOn 属性设置为 false。

但我不知道模型类中的通知属性 CanLogOn 不是错误的。我运行应用程序并且按钮仍然被禁用。

我需要在模型中实现这种行为:

    public string ValidationResult
    {
        get { return _validationResult; }
        private set
        {
            _validationResult = value;
            NotifyPropertyChanged("ValidationResult");
            //notify property CanLogOn in view model class
        }
    }

有什么建议吗?谢谢。

4

1 回答 1

0

将事件处理程序附加到PropertyChanged视图模型中的用户事件:

CurrentUser.PropertyChanged += new PropertyChangedEventHandler(CurrentUser_PropertyChanged);

如果发生更改,请添加发送通知ValidationResult

void CurrentUser_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "ValidationResult") NotifyPropertyChanged("CanLogOn");
}

注意:如果您的引用CurrentUser被覆盖,您需要将事件处理程序添加到新对象。您可以通过将附件代码放在CurrentUser.

于 2011-02-05T18:11:07.247 回答