/// <summary> /// Sets the value of a <see cref="ModelProperty"/> for this instance. /// </summary> /// <param name="property">The <see cref="ModelProperty"/> to update.</param> /// <param name="value">The new value for the <see cref="ModelProperty"/>.</param> public override sealed void SetValue(ModelProperty property, object value) { if (property == null) { throw new ArgumentNullException("property"); } if (property.DefaultValue is ModelProperty.UnitializedValue) { throw new ArgumentException("Cannot assign value to derived property: " + property.FullName); } object currentValue; lock (_lockObject) { object originalValue = GetOriginalValue(property); if (!_updatedValues.TryGetValue(property.Key, out currentValue)) { currentValue = originalValue; } if (Object.Equals(value, currentValue)) { return; } if (Object.Equals(value, originalValue)) { _updatedValues = _updatedValues.Remove(property.Key); } else { _updatedValues = _updatedValues.AddOrUpdate(property.Key, value); } } OnModelPropertyChanged(new ModelPropertyChangedEventArgs(property, currentValue, value)); }
private void UpdateModifications(ModelProperty collectionToAddToProperty, ModelProperty collectionToRemoveFromProperty, T item) { var collectionToAddTo = (List <T>)GetValue(collectionToAddToProperty); var collectionToRemoveFrom = (List <T>)GetValue(collectionToRemoveFromProperty); if (collectionToRemoveFrom != null && collectionToRemoveFrom.Remove(item)) { if (collectionToRemoveFrom.Count == 0) { SetValue(collectionToRemoveFromProperty, null); } } else { if (collectionToAddTo == null) { collectionToAddTo = new List <T>(); SetValue(collectionToAddToProperty, collectionToAddTo); } collectionToAddTo.Add(item); } }
/// <summary> /// Constructs a new <see cref="ModelPropertyChangedEventArgs"/>. /// </summary> public ModelPropertyChangedEventArgs(ModelProperty property, object oldValue, object newValue) { Property = property; OldValue = oldValue; NewValue = newValue; }
/// <summary> /// Gets the unmodified value of a property on a model. /// </summary> /// <param name="model">The model to examine.</param> /// <param name="property">The property to examine.</param> /// <returns>The unmodified value of the property (which may be the current value of the property).</returns> public static object GetOriginalValue(DataModelBase model, ModelProperty property) { return(model.GetOriginalValue(property)); }
/// <summary> /// Determines if the specified property is modified on a model. /// </summary> /// <param name="model">The model to examine.</param> /// <param name="property">The property to examine.</param> /// <returns><c>true</c> if the property has been modified on the model, <c>false</c> if not.</returns> public static bool IsPropertyModified(DataModelBase model, ModelProperty property) { return(model.IsModified && model.UpdatedPropertyKeys.Contains(property.Key)); }
internal object GetOriginalValue(ModelProperty property) { return(base.GetValue(property)); }