• 利用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 事件参数                                       

                        });

                }

            }

  • 相关阅读:
    pic32 + Vs1003 正弦测试通过
    c强转问题
    Ucos ii 移植到LPC2148
    Pic32时钟
    linux下的文件扫描程序(转载)
    pic32 spi驱动pmodcls lcd液晶屏
    最*不太*
    vhdl元件例化语句
    被忽略了的gcc 浮点选项
    Linux C/S文件传输和云端文件下载服务模拟
  • 原文地址:https://www.cnblogs.com/gossip/p/2098255.html
Copyright © 2020-2023  润新知