2012-04-29 13 views
0

ドラッグ操作の一部である、繰り返し操作中のコードが表示されています。&ドロップ操作です。私はモデルのドラッグ操作&ドロップ操作のために必要な操作を処理するViewModelBaseのICommandを持っています。 UIイベント引数をViewModelに渡さないようにしていたので、DropCommandに渡す独自の引数型を作成する必要がありました。背後にあるビューのコードで私のコードは次のようになりますので、基本的には:xamlで割り当てられたICommandを呼び出す

// 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

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

に結合のICommandを割り当てることができ、私は私のカスタムUIコントロールにイベントをドロップハンドルとのviewmodelとパスでコマンドを呼び出すことができますそれは引数を計算した。

問題:

1)私はDropCommandの結合は、XAMLで設定されている場合にのみ操作をドロップするようにサブスクライブしたいと思います。どうすればこのバインディングが設定されているかを確認できますか?

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

編集:カスタムコントロールの分離コードであなたのドロップイベントハンドラ内で

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

答えて

0

::私はまた、以下の結合のシナリオを持っている

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

BindingExpressionの存在は何かが結合していることを示していますあなたはBindingExpressionParentBindingプロパティを介してそのバインディングのSourceにアクセスできます。

+0

こんにちはジェイ、私はコマンドリファレンスを取得する問題があるようです。この場合の私の拘束力は、上記で提供されたものとわずかに異なります。私はパスとElementNameを設定しています。 ParentBindingはSourceに対してnullを返し、ElementName(DataContextがViewModelに設定されているコントロールの名前)とPathの正しい値を返します。このシナリオをどうすれば処理できますか? – Goran

+0

私はBindingExpressionからICommandをリフレクションを通して得ることができました。 – Goran

関連する問題