Exemple #1
0
 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);
                }
            }
        }
Exemple #5
0
        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();
 }