これでWPFコマンドの概念を理解しようとしています。 XAMLのコードではないものにコマンドを転送しようとするまでは、かなり簡単です。私はカスタムコマンドでこれを行ういくつかの方法を見てきましたが、組み込みのWPFコマンドでこれを行う方法の簡単な説明はありません。Use WPFコマンドとViewModelの組み合せ
RelayCommandクラスなどを使用してOpenコマンドをViewModelに転送する簡単な方法はありますか?
これでWPFコマンドの概念を理解しようとしています。 XAMLのコードではないものにコマンドを転送しようとするまでは、かなり簡単です。私はカスタムコマンドでこれを行ういくつかの方法を見てきましたが、組み込みのWPFコマンドでこれを行う方法の簡単な説明はありません。Use WPFコマンドとViewModelの組み合せ
RelayCommandクラスなどを使用してOpenコマンドをViewModelに転送する簡単な方法はありますか?
WPFの組み込みApplicationCommands
などはもともとMVVMを意識して設計されていないため、ViewModelに入れようとすると実際には一致しません。 WPF 4では
あなたのViewModelにInputCommands
をバインドすることが可能になりました:
https://www.thomaslevesque.com/2009/10/26/vs2010-binding-support-in-inputbindings/
代替は、あなたが自分で実装するか、Prismのようなライブラリーから得ることができ、DelegateCommands
を使用することです。ビューモデル内のオブジェクトとしてDelegateCommand
を定義し、ビューからバインドすることができます。
バインディングを実行したら、コマンドがビューモデルコードで何をするかを定義します。
添付プロパティを使用して、ViewModelでビューにCommandBindingsを定義できるようにすることもできます。詳細については、私のブログの記事をチェックしてください:
あなたがWPFとMVVMをやっている場合は、私は強くなど、あなたを助けるためにフレームワークを見てお勧めします:
あなたのViewModelが新しいコマンドを公開しているとします。このようなコードで、Application.NewコマンドのバインディングをVMに再ルーティングできます。 XAMLで:
<Window.CommandBindings>
<CommandBinding Command="New" />
...
</Window.CommandBindings>
コードでは、このようなことができます。 (私は背後にあるコードのうち、コードを維持したいので、私はユーティリティクラスでこれを収容する。)
foreach (CommandBinding cb in CommandBindings)
{
switch (((RoutedUICommand)cb.Command).Name)
{
case "New":
cb.Executed += (sender, e) => ViewModel.New.Execute(e);
cb.CanExecute += (sender, e) => e.CanExecute = ViewModel.New.CanExecute(e);
break;
}
}
匿名メソッドはRoutedUICommandとのICommandの間にサンクを提供しています。
EDIT:また、ハンドラを追加するのではなくCommandManagerで明示的にコマンドバインディングを設定することをお勧めします。
CommandManager.RegisterClassCommandBinding(typeof(MainWindow),
new CommandBinding(ApplicationCommands.New,
(sender, e) => ViewModel.NewScore.Execute(e),
(sender, e) => e.CanExecute = ViewModel.NewScore.CanExecute(e)));
私は、これらのいずれかを使用しても私に無料のキーバインディングは与えられないと思います。 – s73v3r
あなたはviewModelのコマンドに 'KeyBinding'をバインドできると信じていますが、正直言って私は' DelegateCommand'しか使用していませんでしたので、もっと完全な例はできません。 –
更新されたリンク:https://www.thomaslevesque.com/2009/10/26/vs2010-binding-support-in-inputbindings/ – simonalexander2005