1

我有 2 个用户控件,父和子,子控件有按钮女巫我想用父视图模型方法单击,但它不起作用,请告诉我我在父视图中错过了什么,我有这样的东西:

XAML
...
<view:childUC vm:ChildBehaviuor.AddCommand="{Binding ExampleCommand}"/>

行为代码:

        public static readonly DependencyProperty AddCommandProperty =DependencyProperty.RegisterAttached
    (
     "AddCommand",
     typeof(ICommand),
     typeof(childBehavior),
     new PropertyMetadata(OnAddCommand)
    );
    public static ICommand GetAddCommand(DependencyObject obj)
    {
        return (ICommand)obj.GetValue(AddCommandProperty);
    }
    public static void SetAddCommand(DependencyObject obj, ICommand value)
    {
        obj.SetValue(AddCommandProperty,value);
    }

private static ICommand command;

private static void OnAddCommand(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            child gp = sender as child;
            childBehavior.command = (ICommand)sender.GetValue(childBehavior.AddCommandProperty);

            if(gp != null && command != null)
            {
                if ((e.NewValue != null) && (e.OldValue == null))
                {
                    gp.AddButton.Click += ButtonClick;
                }
                else if ((e.NewValue == null) && (e.OldValue != null))
                {
                    gp.AddButton.Click -= ButtonClick;
                }
            }
        }
        public static void ButtonClick(object sender,RoutedEventArgs eventArgs)
        {
            childBehavior.command.Execute(null);    
        }

虚拟机父命令:

        public ICommand ExampleCommand
    {
        get
        {
            if (this.exampleCommand == null)
            {
                this.exampleCommand  = new DelegateCommand(...);
            }

            return this.exampleCommand ;
        }
    }
4

1 回答 1

1

我不确定我是否理解您,但是如果您正在寻找一种在您单击父用户控件中的按钮时在子用户控件上执行命令的方法,您需要执行以下操作:

  1. 让您的父用户控件实现 ICommandSource 接口,该接口包含一个名为“Command”的属性。
  2. 在实现 ICommandSource 接口后,将子用户控件中的特定命令绑定到父用户控件上可用的“命令”属性。
  3. 当您单击父用户控件中的按钮时,访问按钮处理程序内部,这是您父用户控件中的一个方法,您通过界面获得的可用命令属性。访问 Command 属性后调用 Command.Execute() 方法,该方法将转到您的子用户控件并触发您之前绑定的命令。

这就是你如何从父用户控件对子用户控件执行命令的方式。如果你想反过来,你只需要用父母替换每个子单词,用孩子替换每个父单词:)

于 2013-02-23T18:05:20.023 回答