| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | namespace Caliburn.Micro {    using System;    using System.ComponentModel;    using System.Windows;    using System.Windows.Interactivity;    /// <summary>    /// Represents a parameter of an <see cref="ActionMessage"/>.    /// </summary>    public class Parameter : Freezable, IAttachedObject {        /// <summary>        /// A dependency property representing the parameter's value.        /// </summary>        public static readonly DependencyProperty ValueProperty =            DependencyProperty.Register(                "Value",                typeof(object),                typeof(Parameter),                new PropertyMetadata(OnValueChanged)                );        DependencyObject associatedObject;        WeakReference owner;        /// <summary>        /// Gets or sets the value of the parameter.        /// </summary>        /// <value>The value.</value>        [Category("Common Properties")]        public object Value {            get { return GetValue(ValueProperty); }            set { SetValue(ValueProperty, value); }        }        DependencyObject IAttachedObject.AssociatedObject {            get            {                ReadPreamble();                return associatedObject;            }        }        /// <summary>        /// Gets or sets the owner.        /// </summary>        protected ActionMessage Owner {            get { return owner == null ? null : owner.Target as ActionMessage; }            set { owner = new WeakReference(value); }        }        void IAttachedObject.Attach(DependencyObject dependencyObject) {            WritePreamble();            associatedObject = dependencyObject;            WritePostscript();        }        void IAttachedObject.Detach() {            WritePreamble();            associatedObject = null;            WritePostscript();        }        /// <summary>        /// When implemented in a derived class, creates a new instance of the <see cref="T:System.Windows.Freezable"/> derived class.        /// </summary>        /// <returns>The new instance.</returns>        protected override Freezable CreateInstanceCore() {            return new Parameter();        }        /// <summary>        /// Makes the parameter aware of the <see cref="ActionMessage"/> that it's attached to.        /// </summary>        /// <param name="owner">The action message.</param>        internal void MakeAwareOf(ActionMessage owner) {            Owner = owner;        }        static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {            var parameter = (Parameter)d;            var owner = parameter.Owner;            if (owner != null) {                owner.UpdateAvailability();            }        }    }}
 |