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

                        });

                }

            }

  • 相关阅读:
    react萌新的读书笔记(一)
    python 读取目录下的文件
    scrapy爬虫入门
    iPad和iPhone如何保护自己的隐私?
    郭盛华动真格了!新公司获百亿融资,网友:还招人不
    僵尸网络瞄准Linux服务器
    中美黑客谁更强?揭秘郭盛华与凯文的传奇故事
    VMware新致命漏洞,黑客可远程控制你的系统
    中国两大网络守护神,为祖国默默付出着,向他们致敬!
    Web应用程序已成为黑客的首要目标
  • 原文地址:https://www.cnblogs.com/gossip/p/2098255.html
Copyright © 2020-2023  润新知