0

コマンドの複数のインスタンスを呼び出す必要がある

この例では、「A」と「B」の 2 つのコントロールを使用します。

「A」は Invoker で、「B」は Invokie であり、「B」の複数のインスタンスがあります。

コントロール:

 public class A : Control 
 {
     public A()
     {}

     public ICommand OnACommand   
     {
        get { return (ICommand)GetValue(OnAProperty); }
        set { SetValue(OnACommandProperty, value); }
     }

    public static readonly DependencyProperty OnACommandProperty =
        DependencyProperty.Register("OnACommand", typeof(ICommand), typeof(A), new UIPropertyMetadata(null));

     public bool Something   
     {
        get { return (bool)GetValue(SomethingProperty); }
        set { SetValue(SomethingProperty, value); }
     }

    public static readonly DependencyProperty SomethingProperty=
        DependencyProperty.Register("Something", typeof(bool), typeof(A), new UIPropertyMetadata(false,OnSometingPropertyChanged));

    private static void  OnSometingPropertyChanged(...)
    {
        ... 
        OnACommand.Execute(this.Value);
    }                  
 }


 public class B : Control 
 {
     public B(){ }

     public ICommand OnBCommand   
     {
        get { return (ICommand)GetValue(OnBCommandProperty); }
        set { SetValue(OnBCommandProperty, value); }
     }

    public static readonly DependencyProperty OnBCommandProperty =
        DependencyProperty.Register("OnBCommand", typeof(ICommand), typeof(B), new UIPropertyMetadata(null));              
 }

バインディング:

   <local:B  x:Name="B1" OnBCommand="{Binding ElementName=A1 , Path=OnACommand />
   <local:B  x:Name="B2" OnBCommand="{Binding ElementName=A1 , Path=OnACommand />   
   <local:A  x:Name="A1"  />   

私が必要としているのは、その A コマンドにバインドされたすべての B コマンドが、OnACommand の実行時に実行されることです。

私がうまくいくと思う唯一のアプローチは、B 内に Command を実装し、それを OneWayTosourceにバインドした場合ですが、最後の Bind to A だけが Executed を取得する B になります。

  public B()
  {
       OnBCommand = new RelayCommand<int> 
                    (
                        value => { this.Value = value ....}
                    );
  }

   <local:B  x:Name="B1" 
             OnBCommand="{Binding ElementName=A1,Path=OnACommand,Mode=OneWayToSource />
   <local:B  x:Name="B2" 
             OnBCommand="{Binding ElementName=A1,Path=OnACommand,Mode=OneWayToSource />   
   <local:A  x:Name="A1"  />   

OneWay のように他の方法でバインドした場合、A にコマンドを実装する必要があり、B 内のデリゲートからの実行を確認する方法がない限り、B はそれが実行されたことさえわかりません。

要約すると、1 つのソースから複数のターゲットを実行する必要があります。

さらに、「A1」で宣言し、すべてのBをサブスクライブした通常の.netイベントを使用してこれを解決したことを指摘するかもしれませんが、これはMVVMで記述されたWPFであるため、これを行うMVVMスタイルの方法を探しています、コマンドを使用します。

前もって感謝します。

4

1 に答える 1

2

やろうとしていることを達成するための可能なアプローチは、複合コマンドを使用することです。

于 2012-10-02T17:43:11.150 に答える