別々のウィンドウにある2つのボタンに同じカスタムRoutedCommandを使用したいと思います。グローバルカスタムRoutedCommandを定義する方法は?
コードを繰り返さないために、私はコマンドをアプリケーションのどこかに定義し、両方のボタンにバインドしたいと考えています。
私はそれを達成するためにスタイルを使用することを考えました。以下、簡単なサンプルで問題を再現します。
私はApp.Xamlでスタイルを宣言:App.Xaml.csで
<Application.Resources>
<Style TargetType="{x:Type Window}">
<Setter Property="CommandBindings">
<Setter.Value>
<!--<Window.CommandBindings>--> <!--I tried with or without this. Doesn't change-->
<CommandBinding Command="{x:Static local:App.testBindingCommand}"
Executed="OnExecuted" CanExecute="OnCanExecute" />
<!--</Window.CommandBindings>-->
</Setter.Value>
</Setter>
</Style>
</Application.Resources>
とカスタムコマンド:
public static RoutedCommand testBindingCommand = new RoutedCommand();
private void OnExecuted(object sender, ExecutedRoutedEventArgs e)
{
System.Windows.MessageBox.Show("OnExecuted");
}
private void OnCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
System.Windows.MessageBox.Show("OnCanExecute");
e.CanExecute = true;
}
コンパイラがコードを好きで、エラーを与えるものではありません。
エラーMC3080:プロパティセットター 'CommandBindings'は、アクセス可能なセットアクセサを持たないため設定できません。
AFAIKでは、WindowクラスにはCommandBindingsプロパティがあります。
1)グローバルコマンドバインディングを正しく宣言するためにスタイルを使用していますか?そうでない場合は、どうすればいいですか?
2)スタイルでプロパティCommandBindingsを設定できないのはなぜですか?
ありがとうございます!
実際、CommandBindingsCollectionとCommandBindingの間のバインディングは正しいです。だから私は最初にを試したのです(app.xamlのコメントを参照してください) 私はDelegateCommandでlokkを取るでしょう –
rockeye
あなたは正しいです。 RelayCommand(またはDelegateCommand)を使用する方がはるかに簡単で、CommandBindingの使用は避けてください。ありがとう – rockeye