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);
- });
- }
- }
- }
|