Esempio n. 1
0
        /// <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);
            }
        }
Esempio n. 2
0
        /// <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);
            }
        }
Esempio n. 3
0
        private static void AffectsRenderInvalidate(PerspexPropertyChangedEventArgs e)
        {
            Visual visual = e.Sender as Visual;

            if (visual != null)
            {
                visual.InvalidateVisual();
            }
        }
Esempio n. 4
0
        /// <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);
            }
        }
Esempio n. 5
0
        /// <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);
            }
        }
Esempio n. 6
0
        /// <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);
            }
        }
Esempio n. 7
0
        /// <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);
                }
            }
        }
Esempio n. 8
0
        /// <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);
            }
        }
Esempio n. 9
0
        /// <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);
            }
        }
Esempio n. 10
0
        /// <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);
            }
        }
Esempio n. 11
0
        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();
            }
        }
Esempio n. 12
0
        /// <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();
            }
        }
Esempio n. 13
0
 /// <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();
 }
Esempio n. 14
0
 /// <summary>
 /// Called when a perspex property changes on the object.
 /// </summary>
 /// <param name="e">The event arguments.</param>
 protected virtual void OnPropertyChanged(PerspexPropertyChangedEventArgs e)
 {
 }
Esempio n. 15
0
 /// <summary>
 /// Notifies the <see cref="Initialized"/> observable.
 /// </summary>
 /// <param name="e">The observable arguments.</param>
 internal void NotifyInitialized(PerspexPropertyChangedEventArgs e)
 {
     _initialized.OnNext(e);
 }
Esempio n. 16
0
        /// <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();
            }
        }
Esempio n. 17
0
 /// <summary>
 /// Notifies the <see cref="Changed"/> observable.
 /// </summary>
 /// <param name="e">The observable arguments.</param>
 internal void NotifyChanged(PerspexPropertyChangedEventArgs e)
 {
     _changed.OnNext(e);
 }
Esempio n. 18
0
 /// <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();
 }