/// <summary> /// Initializes a new instance of the <see cref="PerspexObject"/> class. /// </summary> public PerspexObject() { _propertyLog = Log.ForContext(new[] { new PropertyEnricher("Area", "Property"), new PropertyEnricher("SourceContext", GetType()), new PropertyEnricher("Id", GetHashCode()), }); foreach (var property in PerspexPropertyRegistry.Instance.GetRegistered(this)) { object value = property.IsDirect ? property.Getter(this) : property.GetDefaultValue(GetType()); var e = new PerspexPropertyChangedEventArgs( this, property, PerspexProperty.UnsetValue, value, BindingPriority.Unset); property.NotifyInitialized(e); } }
/// <summary> /// Raises the <see cref="PropertyChanged"/> event. /// </summary> /// <param name="property">The property that has changed.</param> /// <param name="oldValue">The old property value.</param> /// <param name="newValue">The new property value.</param> /// <param name="priority">The priority of the binding that produced the value.</param> private void RaisePropertyChanged( PerspexProperty property, object oldValue, object newValue, BindingPriority priority) { Contract.Requires <NullReferenceException>(property != null); PerspexPropertyChangedEventArgs e = new PerspexPropertyChangedEventArgs( this, property, oldValue, newValue, priority); OnPropertyChanged(e); property.NotifyChanged(e); if (PropertyChanged != null) { PropertyChanged(this, e); } if (_inpcChanged != null) { PropertyChangedEventArgs e2 = new PropertyChangedEventArgs(property.Name); _inpcChanged(this, e2); } }
private static void AffectsRenderInvalidate(PerspexPropertyChangedEventArgs e) { Visual visual = e.Sender as Visual; if (visual != null) { visual.InvalidateVisual(); } }
/// <summary> /// Called when a property is changed on the current <see cref="InheritanceParent"/>. /// </summary> /// <param name="sender">The event sender.</param> /// <param name="e">The event args.</param> /// <remarks> /// Checks for changes in an inherited property value. /// </remarks> private void ParentPropertyChanged(object sender, PerspexPropertyChangedEventArgs e) { Contract.Requires <ArgumentNullException>(e != null); if (e.Property.Inherits && !this.IsSet(e.Property)) { this.RaisePropertyChanged(e.Property, e.OldValue, e.NewValue); } }
/// <summary> /// Observer method for <see cref="AddClassHandler{TTarget}(IObservable{PerspexPropertyChangedEventArgs}, /// Func{TTarget, Action{PerspexPropertyChangedEventArgs}})"/>. /// </summary> /// <typeparam name="TTarget">The sender type to accept.</typeparam> /// <param name="e">The event args.</param> /// <param name="handler">Given a TTarget, returns the handler.</param> private static void SubscribeAdapter <TTarget>( PerspexPropertyChangedEventArgs e, Func <TTarget, Action <PerspexPropertyChangedEventArgs> > handler) where TTarget : class { var target = e.Sender as TTarget; if (target != null) { handler(target)(e); } }
/// <summary> /// Raises the <see cref="PropertyChanged"/> event. /// </summary> /// <param name="property">The property that has changed.</param> /// <param name="oldValue">The old property value.</param> /// <param name="newValue">The new property value.</param> private void RaisePropertyChanged(PerspexProperty property, object oldValue, object newValue) { Contract.Requires <NullReferenceException>(property != null); if (this.PropertyChanged != null) { PerspexPropertyChangedEventArgs e = new PerspexPropertyChangedEventArgs(this, property, oldValue, newValue); property.NotifyChanged(e); this.PropertyChanged(this, e); } if (this.inpcChanged != null) { PropertyChangedEventArgs e = new PropertyChangedEventArgs(property.Name); this.inpcChanged(this, e); } }
/// <summary> /// Raises the <see cref="PropertyChanged"/> event. /// </summary> /// <param name="property">The property that has changed.</param> /// <param name="oldValue">The old property value.</param> /// <param name="newValue">The new property value.</param> /// <param name="priority">The priority of the binding that produced the value.</param> protected void RaisePropertyChanged( PerspexProperty property, object oldValue, object newValue, BindingPriority priority) { Contract.Requires <ArgumentNullException>(property != null); VerifyAccess(); PerspexPropertyChangedEventArgs e = new PerspexPropertyChangedEventArgs( this, property, oldValue, newValue, priority); if (property.Notifying != null) { property.Notifying(this, true); } try { OnPropertyChanged(e); property.NotifyChanged(e); if (PropertyChanged != null) { PropertyChanged(this, e); } if (_inpcChanged != null) { PropertyChangedEventArgs e2 = new PropertyChangedEventArgs(property.Name); _inpcChanged(this, e2); } } finally { if (property.Notifying != null) { property.Notifying(this, false); } } }
/// <summary> /// Initializes a new instance of the <see cref="PerspexObject"/> class. /// </summary> public PerspexObject() { foreach (var property in PerspexPropertyRegistry.Instance.GetRegistered(this)) { object value = property.IsDirect ? ((IDirectPropertyAccessor)property).GetValue(this) : ((IStyledPropertyAccessor)property).GetDefaultValue(GetType()); var e = new PerspexPropertyChangedEventArgs( this, property, PerspexProperty.UnsetValue, value, BindingPriority.Unset); property.NotifyInitialized(e); } }
/// <summary> /// Initializes a new instance of the <see cref="PerspexObject"/> class. /// </summary> public PerspexObject() { foreach (var p in this.GetAllValues()) { var priority = p.PriorityValue != null ? (BindingPriority)p.PriorityValue.ValuePriority : BindingPriority.LocalValue; var e = new PerspexPropertyChangedEventArgs( this, p.Property, PerspexProperty.UnsetValue, p.CurrentValue, priority); p.Property.NotifyInitialized(e); } }
/// <summary> /// Initializes a new instance of the <see cref="PerspexObject"/> class. /// </summary> public PerspexObject() { _propertyLog = Log.ForContext(new[] { new PropertyEnricher("Area", "Property"), new PropertyEnricher("SourceContext", GetType()), new PropertyEnricher("Id", GetHashCode()), }); foreach (var property in GetRegisteredProperties()) { var e = new PerspexPropertyChangedEventArgs( this, property, PerspexProperty.UnsetValue, property.GetDefaultValue(GetType()), BindingPriority.Unset); property.NotifyInitialized(e); } }
private static void RenderTransformChanged(PerspexPropertyChangedEventArgs e) { var sender = e.Sender as Visual; if (sender != null) { var oldValue = e.OldValue as Transform; var newValue = e.NewValue as Transform; if (oldValue != null) { oldValue.Changed -= sender.RenderTransformChanged; } if (newValue != null) { newValue.Changed += sender.RenderTransformChanged; } sender.InvalidateVisual(); } }
/// <summary> /// Called when a visual's <see cref="RenderTransform"/> changes. /// </summary> /// <param name="e">The event args.</param> private static void RenderTransformChanged(PerspexPropertyChangedEventArgs e) { var sender = e.Sender as Visual; if (sender?.VisualRoot != null) { var oldValue = e.OldValue as Transform; var newValue = e.NewValue as Transform; if (oldValue != null) { oldValue.Changed -= sender.RenderTransformChanged; } if (newValue != null) { newValue.Changed += sender.RenderTransformChanged; } sender.InvalidateVisual(); } }
/// <summary> /// Called when a property changes that should invalidate the visual. /// </summary> /// <param name="e">The event args.</param> private static void AffectsRenderInvalidate(PerspexPropertyChangedEventArgs e) { (e.Sender as Visual)?.InvalidateVisual(); }
/// <summary> /// Called when a perspex property changes on the object. /// </summary> /// <param name="e">The event arguments.</param> protected virtual void OnPropertyChanged(PerspexPropertyChangedEventArgs e) { }
/// <summary> /// Notifies the <see cref="Initialized"/> observable. /// </summary> /// <param name="e">The observable arguments.</param> internal void NotifyInitialized(PerspexPropertyChangedEventArgs e) { _initialized.OnNext(e); }
/// <summary> /// Called when a property changes that should invalidate the visual. /// </summary> /// <param name="e">The event args.</param> private static void AffectsRenderInvalidate(PerspexPropertyChangedEventArgs e) { Visual visual = e.Sender as Visual; if (visual != null) { visual.InvalidateVisual(); } }
/// <summary> /// Notifies the <see cref="Changed"/> observable. /// </summary> /// <param name="e">The observable arguments.</param> internal void NotifyChanged(PerspexPropertyChangedEventArgs e) { _changed.OnNext(e); }