Catel.Data.ModelBase.RaisePropertyChanged C# (CSharp) Метод

RaisePropertyChanged() приватный Метод

Invoked when a property value has changed.
private RaisePropertyChanged ( object sender, PropertyChangedEventArgs e, bool setDirtyAndAllowAutomaticValidation, bool isRefreshCallOnly ) : void
sender object The sender.
e System.ComponentModel.PropertyChangedEventArgs The instance containing the event data.
setDirtyAndAllowAutomaticValidation bool if set to true, the property is set and automatic validation is allowed.
isRefreshCallOnly bool if set to true, the call is only to refresh updates (for example, for the IDataErrorInfo /// implementation). If this value is false, the custom change handlers will not be called.
Результат void
        private void RaisePropertyChanged(object sender, PropertyChangedEventArgs e, bool setDirtyAndAllowAutomaticValidation, bool isRefreshCallOnly)
        {
            if (string.IsNullOrEmpty(e.PropertyName))
            {
                if (!DisablePropertyChangeNotifications)
                {
                    // Call & exit, we can't handle "update them all" property change notifications
                    base.RaisePropertyChanged(this, new AdvancedPropertyChangedEventArgs(sender, e.PropertyName));
                }

                return;
            }

            // If this is an internal data object base property, just leave
            if (IsModelBaseProperty(e.PropertyName))
            {
                var senderAsModelBase = sender as ModelBase;
                if ((senderAsModelBase != null) && (string.Equals(e.PropertyName, IsDirtyProperty.Name, StringComparison.Ordinal)))
                {
                    // Maybe this is a child object informing us that it's not dirty any longer
                    if (senderAsModelBase.GetValue<bool>(e.PropertyName) == false)
                    {
                        if (!ReferenceEquals(this, sender))
                        {
                            // Ignore
                            return;
                        }
                    }

                    // A child became dirty, we are dirty as well
                    if (!ReferenceEquals(this, sender))
                    {
                        IsDirty = true;
                    }
                    else
                    {
                        if (!DisablePropertyChangeNotifications)
                        {
                            // Explicitly call base because we have overridden the behavior
                            var eventArgs = new AdvancedPropertyChangedEventArgs(sender, this, e.PropertyName);
                            base.RaisePropertyChanged(this, eventArgs);
                        }
                    }

                    return;
                }
            }

            if (HandlePropertyAndCollectionChanges)
            {
                if (ReferenceEquals(this, sender))
                {
                    AdvancedPropertyChangedEventArgs eventArgs;
                    var advancedEventArgs = e as AdvancedPropertyChangedEventArgs;
                    if (advancedEventArgs != null)
                    {
                        eventArgs = new AdvancedPropertyChangedEventArgs(this, advancedEventArgs);
                    }
                    else
                    {
                        eventArgs = new AdvancedPropertyChangedEventArgs(sender, this, e.PropertyName);
                    }

                    if (!isRefreshCallOnly)
                    {
                        SuspensionContext callbackSuspensionContext;

                        lock (_propertyValuesLock)
                        {
                            callbackSuspensionContext = _changeCallbacksSuspensionContext;
                        }

                        if (callbackSuspensionContext != null)
                        {
                            callbackSuspensionContext.Add(e.PropertyName);
                        }
                        else if (IsPropertyRegistered(e.PropertyName))
                        {
                            var propertyData = GetPropertyData(e.PropertyName);

                            var handler = propertyData.PropertyChangedEventHandler;
                            if (handler != null)
                            {
                                handler(this, eventArgs);
                            }
                        }
                    }

                    if (!DisablePropertyChangeNotifications)
                    {
                        // Explicitly call base because we have overridden the behavior
                        base.RaisePropertyChanged(this, eventArgs);
                    }
                }
            }

            SetDirtyAndAutomaticallyValidate(e.PropertyName, setDirtyAndAllowAutomaticValidation);
        }

Same methods

ModelBase::RaisePropertyChanged ( object sender, Catel.Data.AdvancedPropertyChangedEventArgs e ) : void