1

親と子の2つのユーザーコントロールがあります。子コントロールにはボタンウィッチがあります。親viewmodelメソッドでクリックしたいのですが、機能しません。親ビューで見逃しているものを教えてください。次のようなものがあります。

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

VM親コマンド:

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

            return this.exampleCommand ;
        }
    }
4

1 に答える 1

1

私があなたを理解したかどうかはわかりませんが、親ユーザーコントロールのボタンをクリックしたときに子ユーザーコントロールでコマンドを実行する方法を探している場合は、次の手順を実行する必要があります。

  1. 親のusercontrolに、「Command」というプロパティを含むICommandSourceインターフェイスを実装させます。
  2. 子usercontrolにある特定のコマンドを、ICommandSourceインターフェイスを実装した後に親usercontrolで使用できる「Command」プロパティにバインドします。
  3. 親ユーザーコントロールにあるボタンをクリックすると、ボタンハンドラー内にアクセスします。これは、親ユーザーコントロールのメソッドであり、インターフェイスから取得した使用可能なコマンドプロパティです。Commandプロパティにアクセスした後、Command.Execute()メソッドを呼び出します。これにより、子のusercontrolに移動し、前にバインドしたコマンドがトリガーされます。

これが、親usercontrolから子usercontrolに対してコマンドを実行する方法です。逆の場合は、すべての子単語を親に、すべての親単語を子に置き換える必要があります:)

于 2013-02-23T18:05:20.023 に答える