| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;namespace OpenSEMI.ClientBase.Command{    public class PropertyCommandTrigger : CommandTrigger    {        #region Dependency Properties        #region Property Property        /// <value>Identifies the Property dependency property</value>        public static readonly DependencyProperty PropertyProperty =            DependencyProperty.Register("Property", typeof(DependencyProperty), typeof(PropertyCommandTrigger),            new FrameworkPropertyMetadata(null));        /// <value>description for Property property</value>        public DependencyProperty Property        {            get { return (DependencyProperty)GetValue(PropertyProperty); }            set { SetValue(PropertyProperty, value); }        }        #endregion        #region Value Property        /// <value>Identifies the Value dependency property</value>        public static readonly DependencyProperty ValueProperty =            DependencyProperty.Register("Value", typeof(string), typeof(PropertyCommandTrigger),            new FrameworkPropertyMetadata(null));        /// <value>description for Value property</value>        public string Value        {            get { return (string)GetValue(ValueProperty); }            set { SetValue(ValueProperty, value); }        }        #endregion        #endregion        protected override Freezable CreateInstanceCore()        {            return new PropertyCommandTrigger();        }        #region T Property        /// <value>Identifies the T dependency property</value>        public static readonly DependencyProperty TProperty =            DependencyProperty.Register("T", typeof(object), typeof(PropertyCommandTrigger),            new FrameworkPropertyMetadata(null, OnTChanged));        /// <value>description for T property</value>        public object T        {            get { return (object)GetValue(TProperty); }            set { SetValue(TProperty, value); }        }        /// <summary>        /// Invoked on T change.        /// </summary>        /// <param name="d">The object that was changed</param>        /// <param name="e">Dependency property changed event arguments</param>        static void OnTChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)        {        }        #endregion        protected override void InitializeCore(FrameworkElement source)        {            DependencyPropertyDescriptor descriptor = DependencyPropertyDescriptor.FromProperty(Property, source.GetType());            descriptor.AddValueChanged(source, (s, e) =>            {                CommandParameter<object> parameter = new PropertyCommandParameter<object, object>(                    CustomParameter, Property, source.GetValue(Property));                object value = Value;                if (descriptor.Converter.CanConvertFrom(typeof(string)))                {                    value = descriptor.Converter.ConvertFromString(Value);                }                if (object.Equals(source.GetValue(Property), value))                    ExecuteCommand(parameter);            });        }    }}
 |