Hi I make validation on error in my model class.
 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
    }
This model class I use in view model and I bind Nick property of model class to the Text property of comboBox control.
Also I bind method LogOn from view model class on button click event in view. I would like disabale button if validation in model class has error:
View model:
[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()
    {}
 }
Solution is simple set CanLogOn property on false if validation in CurrentUser (object) property has error.
But I don’t how notify property CanLogOn that in model class is not error. I run app and button is still disabled.
I need achive this behavior in model:
    public string ValidationResult
    {
        get { return _validationResult; }
        private set
        {
            _validationResult = value;
            NotifyPropertyChanged("ValidationResult");
            //notify property CanLogOn in view model class
        }
    }
Any advice? Thank.
                        
Attach an event handler to the
PropertyChangedevent of the user in your viewmodel:Add send a notification if the
ValidationResultchanges:Note: If your reference
CurrentUseris overwritten you need to add the event handler to the new object. You could do this by placing the attachment code in the setter ofCurrentUser.