この質問のタイトルの言い回しが原因で、読者はICommand
UI アクションを viewModel のメソッドに直接バインドする方法ではなく、 の代わりを探してここにたどり着くかもしれません。(「CanExecute」部分をどうするかという問題が未解決のままであるため、これはほとんど価値がありません。)
の使用はICommand
で定義されているため、それ自体で問題があります。つまり、ViewModel で sWindows.Input
を宣言するには、アプリケーション ロジック内から WPF とキッチン シンクを参照する必要があります。他の多くの GUI 機能が利用可能であるICommand
ことに気付き、それを利用し始めると、アプリケーション ロジックとプレゼンテーション ロジックが混在するひどい混乱が生じる可能性があります。MessageBox
したがって、 を取り除きたい場合は、using System.Windows
を取り除く必要があり、 をICommand
取り除きたい場合はICommand
、次のことを知っておくとよいでしょう。
WPF (具体的には XAML デザイナー) では、viewModel がインターフェイスのインスタンスを静的に公開する必要はありません。ICommand
ここで静的とは、設計者が設計時にリフレクションを使用して、コマンド オブジェクトがICommand
インターフェイスを実装していることを証明できる必要がないことを意味します。代わりに、WPF は実行時にチェックして、UI アクションが実際に実装されるオブジェクトにバインドされていることを確認しますICommand
。
したがって、ビューモデル (アプリケーション ロジック) では、ICommand
WPF のインターフェイスの代わりにCommand
、独自のデバイスのインターフェイスを使用できます。必要なのは、実行時にインスタンス化してCommand
インターフェイスを実装するクラスも実装ICommand
することだけです。 WPFを満足させてください。このようにして、ViewModel 内からのインクルードを回避でき、その後、アプリケーション ロジックでのICommand
参照を回避できる場合があります。System.Windows