protected virtual void RaiseErrorsChanged(DataErrorsChangedEventArgs args) { OnPropertyChanged(Empty.HasErrorsChangedArgs); OnPropertyChanged(Empty.IsValidChangedArgs); OnPropertyChanged(Empty.IndexerPropertyChangedArgs); if (ErrorsChanged != null) { ThreadManager.Invoke(Settings.EventExecutionMode, this, args, RaiseErrorsChangedDelegate); } #if NONOTIFYDATAERROR string ignoreProperty = args.PropertyName ?? string.Empty; lock (_locker) { //Disable validation to prevent cycle var contains = IgnoreProperties.Contains(ignoreProperty); if (!contains) { IgnoreProperties.Add(ignoreProperty); } try { OnPropertyChanged(ignoreProperty); } finally { if (!contains) { IgnoreProperties.Remove(ignoreProperty); } } } #endif }
private void HandleValidationInternal(object sender, object message) { var validationMessage = message as AsyncValidationMessage; if (validationMessage != null) { RaiseErrorsChanged(new DataErrorsChangedEventArgs(validationMessage.PropertyName)); OnHandleAsyncValidationMessage(sender, validationMessage); return; } var errorsMessage = message as DataErrorsChangedMessage; if (errorsMessage == null) { return; } OnErrorsChanged(sender, errorsMessage); #if NONOTIFYDATAERROR //To update property error in UI. ThreadManager.InvokeOnUiThreadAsync(() => { string ignoreProperty = errorsMessage.PropertyName ?? string.Empty; lock (_locker) { //Disable validation to prevent cycle var contains = IgnoreProperties.Contains(ignoreProperty); if (!contains) { IgnoreProperties.Add(ignoreProperty); } try { OnPropertyChanged(errorsMessage.PropertyName, ExecutionMode.None); } finally { if (!contains) { IgnoreProperties.Remove(ignoreProperty); } } } }); #endif }
protected void RemoveIgnoreProperty <TModel>(Func <Expression <Func <TModel, object> > > getProperty) { IgnoreProperties.Remove(getProperty.GetMemberName()); }
/// <summary> /// Removes a property name to the <see cref="ValidatableViewModel.IgnoreProperties" />. /// </summary> protected void RemoveIgnoreProperty <TValue>(Expression <Func <T, TValue> > getProperty) { IgnoreProperties.Remove(getProperty.GetMemberInfo().Name); }