zoukankan      html  css  js  c++  java
  • 利用System.Windows.Interactivity.dll实现View时间在ViewModel中处理(可带sender、EventArgs参数)

    一、公共类
    namespace Gh.Ticket.Common

    {

        public class ExtendedCommandParameter

        {

            public ExtendedCommandParameter(EventArgs eventArgs, FrameworkElement sender, object parameter)

            {

                EventArgs = eventArgs;

                Sender = sender;

                Parameter = parameter;

            }

            public EventArgs EventArgs { getprivate set; }

            public FrameworkElement Sender { getprivate set; }

            public object Parameter { getprivate set; }

        }

        public class ExtendedInvokeCommandAction : TriggerAction<FrameworkElement>

        {

            public static readonly DependencyProperty CommandProperty = DependencyProperty.Register("Command"typeof(ICommand), typeof(ExtendedInvokeCommandAction), new PropertyMetadata(null, CommandChangedCallback));

            public static readonly DependencyProperty CommandParameterProperty = DependencyProperty.Register("CommandParameter"typeof(object), typeof(ExtendedInvokeCommandAction), new PropertyMetadata(null, CommandParameterChangedCallback));

            private static void CommandParameterChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)

            {

                var invokeCommand = d as ExtendedInvokeCommandAction;

                if (invokeCommand != null)

                    invokeCommand.SetValue(CommandParameterProperty, e.NewValue);

            }

            private static void CommandChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)

            {

                var invokeCommand = d as ExtendedInvokeCommandAction;

                if (invokeCommand != null)

                    invokeCommand.SetValue(CommandProperty, e.NewValue);

            }

            protected override void Invoke(object parameter)

            {

                if (this.Command == null)

                    return;

                if (this.Command.CanExecute(parameter))

                {

                    var commandParameter = new ExtendedCommandParameter(parameter as EventArgsthis.AssociatedObject,

                                                                        GetValue(CommandParameterProperty));

                    this.Command.Execute(commandParameter);

                }

            }

            #region public properties

            public object CommandParameter

            {

                get { return GetValue(CommandParameterProperty); }

                set { SetValue(CommandParameterProperty, value); }

            }

            public ICommand Command

            {

                get { return GetValue(CommandProperty) as ICommand; }

                set { SetValue(CommandParameterProperty, value); }

            }

            #endregion

        }

    }

    二、View

     xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

     xmlns:local="ExtendedInvokeCommandAction类所在命名空间"

      <TextBox x:Name="txtControlID"  >

                            <i:Interaction.Triggers>

                                <i:EventTrigger EventName="PreviewKeyDown">

                                    <local:ExtendedInvokeCommandAction

                                            Command="{Binding CustomCommand}"

                                            //这里不绑定则ExtendedCommandParameter.Parameter的值为对应ViewModel的值,否则可绑定其他控件的属性值

                                            CommandParameter="{Binding}"

                                    />

                                </i:EventTrigger>

                            </i:Interaction.Triggers>

                        </TextBox>

    三、ViewMode
     public ICommand CustomCommand

            {

                get

                {

                    return new DelegateCommand<object>(x =>

                        {

                            ExtendedCommandParameter p = x as ExtendedCommandParameter;

                             p.sender  触发事件对象

                             p.EventArgs 事件参数                                       

                        });

                }

            }

  • 相关阅读:
    JDBC
    Oracle基本数据类型
    vue生命周期详解
    Vue的Ajax(vue-resource/axios)
    Vue实例属性/方法/生命周期
    Vue自定义指令
    深入了解组件- -- 动态组件 & 异步组件
    深入了解组件- -- 插槽
    深入了解组件- -- 自定义事件
    深入了解组件- -- Prop
  • 原文地址:https://www.cnblogs.com/gossip/p/2098255.html
Copyright © 2011-2022 走看看