private void DataModel_DataChanged(object sender, PropertyChangedEventArgs e) { if (!ModifiedProperties.Contains(e.PropertyName)) { ModifiedProperties.Add(e.PropertyName); } }
// Captures the original value for a property that is changing. internal void RecordOriginalValue(string propertyName, object oldValue, object newValue) { if (IsChangeTrackingEnabled && _objectState != ObjectState.Added) { if (OriginalValues.ContainsKey(propertyName)) { if (object.Equals(OriginalValues[propertyName], newValue)) { OriginalValues.Remove(propertyName); if (OriginalValues.Count == 0 && _objectState == ObjectState.Modified) { State = ObjectState.Unchanged; ModifiedProperties.Clear(); } else { ModifiedProperties.Remove(propertyName); } } } else { OriginalValues[propertyName] = oldValue; } } }
// Resets the ObjectChangeTracker to the Unchanged state and // clears the original values as well as the record of changes // to collection properties public void AcceptChanges() { ModifiedProperties.Clear(); OriginalValues.Clear(); ObjectsAddedToCollectionProperties.Clear(); ObjectsRemovedFromCollectionProperties.Clear(); IsChangeTrackingEnabled = true; State = ObjectState.Unchanged; }
internal void OnPropertyChanged(string propertyName) { #if SILVERLIGHT if (IsChangeTrackingEnabled && _objectState != ObjectState.Added) #else if (IsChangeTrackingEnabled) #endif { if (!ModifiedProperties.Contains(propertyName)) { ModifiedProperties.Add(propertyName); } } }
public bool ReadModifiedProperty([NotNullWhen(true)] out IProperty?property, out object?value) { if (ModifiedProperties == null) { ModifiedProperties = Entries.Current.ModifiedProperties?.GetEnumerator( ); } if (ModifiedProperties == null || !ModifiedProperties.MoveNext( )) { property = null; value = null; return(false); } property = EnsureEntityType( ).FindProperty(ModifiedProperties.Current.Key); value = ModifiedProperties.Current.Value; return(true); }
private void AddModifiedProperties(PatchEntryChanges branchChange, IModelObject mergeBaseObject, IModelObject newObject, IModelObject headObject, PatchEntryChanges headChange) { if (headChange?.Status == ChangeKind.Deleted) { throw new NotImplementedException($"Conflict as a modified node {branchChange.Path} in merge branch source has been deleted in head."); } var changes = ComputeModifiedProperties(branchChange, mergeBaseObject, newObject, headObject); foreach (var modifiedProperty in changes) { if (typeof(IObjectRepositoryIndex).IsAssignableFrom(modifiedProperty.Property.Property.ReflectedType)) { // Indexes will be recomputed anyways from the changes when committed, // so there is no need to track them in the modified chunks continue; } ModifiedProperties.Add(modifiedProperty); } }
/// <summary> /// Clears the changes. /// </summary> internal void ClearChanges() { ModifiedProperties.Clear(); AddedObjects.Clear(); DeletedObjects.Clear(); }