示例#1
0
        public void OnPropertyChanged(string propertyName, object before, object after)
        {
            if (suppressPropertyChanged || !enabled)
            {
                return;
            }

            BeforePropertyChanged?.Invoke(this, new PropertyChangedExtendedEventArgs(propertyName, before, after));

            if (!object.Equals(after, originalValues[propertyName]))
            {
                isChanged             = true;
                changes[propertyName] = after;
            }
            else
            {
                isChanged = false;
                changes   = new Dictionary <string, object>();
                foreach (var prop in GetProperties())
                {
                    var v = prop.Get(trackable);
                    if (!object.Equals(v, originalValues[prop.Name]))
                    {
                        isChanged          = true;
                        changes[prop.Name] = v;
                    }
                }
            }

            AfterPropertyChanged?.Invoke(this, new PropertyChangedExtendedEventArgs(propertyName, before, after));

            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
示例#2
0
        public void OnPropertyChanged(string prop, object before, object after)
        {
            if (_isChangeDetectionPaused)
            {
                return;
            }

            if (prop != nameof(IsChanged))
            {
                // auto-update the IsChanged property for standard properties
#if DEBUG
                // System.Diagnostics.Debug.WriteLine($"Model change: {prop} from {before} to {after}");
#endif
                if (before != after)
                {
                    IsChanged = true;
                }
            }

            // hook up to events
            DetachChangeEventHandlers(before);
            AttachChangeEventHandlers(after);

            // fire the event
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));

            // optional handler after property change completed (saving etc)
            AfterPropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
        }