TL; DRの場合:最後の段落を参照してください。
純粋なWPFは、プレゼンテーション(コントロール、テキスト、アイコン)をビューに配置し、コマンドロジック(Execute、CanExecuteメソッド)をコードビハインドに配置することを「提案」します。ビュー()とコードビハインドの両方にロジックを配置することに加えて、練習で眉をひそめることは、 XAMLの複製CommandBindings
にはまったく役立ちません:テキスト、アイコン、大きなアイコン、ヒント、およびその他の多数のプロパティは、コマンドのたびに複製する必要があります使用されるもの:メインメニュー、コンテキストメニュー、ツールバーボタン、リボンボタンおよびその他のコントロール。
DelegateCommand
最初の問題(ビューとロジックを本当に分離する)は、によって解決されるように見え、そのRelayCommand
ようなアプローチがあります。コマンドロジックはViewModels(またはMVVMCの場合はControllers)に移動され、コードビハインドはクリーンで、CommandBindings
ビューには意味がありません。
ただし、プレゼンテーションの重複の問題に対して一般的に受け入れられている解決策を見つけることができません。コマンド表示(テキスト、アイコン)とコマンドロジック(Execute
、CanExecute
メソッド)を分離したい。私が見つけたすべてのコードは、プレゼンテーションをコードに入れるか(andなどのRoutedCommand
追加のプロパティを使用してを作成することによって)、コードをプレゼンテーションに入れます(つまり、ハンドラーをビューとコードビハインドに入れます)。私も好きではありません。プレゼンテーションは完全にXAMLで、コードは完全にCS(ViewModelまたはController)である必要があると思います。Label
Icon
質問:ビュー(コマンドを参照するコントロールを備えたXAML)、コマンドの表示(すべてのコマンドのラベル、アイコンなど)、およびコマンドのロジック(ViewModelsまたはControllersのC#コードなどExecute
)を分離する方法は?CanExecute