2009-09-15 30 views
1

コマンドを使用すると、コマンドの実行元が自動的に無効になるため、コマンドのソース(通常はボタン)が無効になるため便利です。WPFコマンド/コマンドバインディングに基づいてコントロールを無効にする

明らかに、この機能はコマンドソースではないコントロールには使用できません。 ListBox

非コマンドソースコントロールでこの機能を有効にする最良の方法は何ですか。 Button

  • ラップListBoxをして何のクロムがないように、ボタンのControlTemplateを変更します。私は、ソリューションのカップルを考えました。
  • 見えないButtonを作成し、Button
  • IsEnabledプロパティにListBoxIsEnabledプロパティをバインドICommandSourceを実装ListBoxの子孫を作成します。

もっとエレガントな方法がありますか?

答えて

4

あなたはCanSelectまたはCanEditのようなあなたのコードビハインド(またはビューモデル)にブールプロパティを作成し、それをあなたのListBoxIsEnabledプロパティをバインドすることができます。対応するコマンドのCanExecuteメソッドでこの新しいプロパティの値を設定するだけです。

+0

お返事ありがとうございます。どこからCanExecuteメソッドが来るのですか? –

+0

私はICommand.CanExecuteメソッド(http://msdn.microsoft.com/en-us/library/system.windows.input.icommand.canexecute.aspx)を参照しています。これは、WPFがコマンド実行可能か否かを判断する。 –

+0

入手しました。誰がICommand.CanExecuteを呼び出すのでしょうか。コマンドがボタンにアタッチされている場合、WPFはジョブを行います(私のポイント#2)。さもなければ、これはどのように機能しますか? –

関連する問題