0

ドラッグ アンド ドロップ操作の一部である、いくつかの繰り返しコードがビューに含まれています。ドラッグ&ドロップ操作のためにモデルで必要な操作を処理する ViewModelBase に ICommand があります。UI イベント引数を ViewModel に渡さないようにしようとしていたので、DropCommand に渡される独自の引数タイプを作成する必要がありました。したがって、基本的に、View のコード ビハインドの私のコードは次のようになります。

// get data required for ordering operation
var args = MyHelperClass.OnDropCompleted(a); // where a is an argument from UI drop event

// execute command
if (args != null) ViewModel.DropCommand.Execute(args);

これは正常に機能しますが、このコードは各ビューで繰り返されます。私の考えは、カスタム UI コントロールに DropCommand を追加することです。そのため、xaml で ICommand バインディングを割り当てることができます。

DropCommand={Binding DropSommand} <-- binds to ViewModel's DropCommand

これで、カスタム UI コントロールでドロップ イベントを処理し、viewmodel でコマンドを呼び出して、計算された引数を渡すことができました。

問題:

1) DropCommand のバインディングが xaml で設定されている場合にのみ、Drop 操作をサブスクライブしたいと考えています。このバインディングが設定されているかどうかを確認するにはどうすればよいですか?

2) ViewModel の ICommand に渡す引数を作成したら、このコマンドをコードから呼び出したいと思います。これどうやってするの?

編集:次のバインディングシナリオもあります:

DropCommand={Binding DataContext.DropCommand, elementName=window}
4

1 に答える 1

0

カスタム コントロールの分離コードのドロップ イベント ハンドラー内:

var bindingExpression = GetBindingExpression(DropCommandProperty);
if  (bindingExpression != null) 
{
    var command = (ICommand)bindingExpression.ParentBinding.Source;
    command.Execute(/* your special argument here */);
}

a の存在は、BindingExpression何かがバインドされていることを示しており、のプロパティSourceを通じてそのバインドの にアクセスできます。BindingExpressionParentBinding

于 2012-04-29T03:17:07.697 に答える