私はMDIソリューション(http://wpfmdi.codeplex.com/参照)とMVVMを使用しています。MVVM/MDIアプリケーションで重複しているRelayCommandsを防ぐ
私はのように、メインのViewModelに、ツールバーおよび/またはメニューをバインドする1 RelayCommandを使用:しかし、子ウィンドウでは、同じ機能のボタンをバインドするために、私はどの別のRelayCommandが必要
ICommand _editSelectedItemCommand;
public ICommand EditSelectedItemCommand
{
get
{
return _editSelectedItemCommand ?? (_editSelectedItemCommand = new RelayCommand(param => CurrentChildViewModel.EditSelectedItem(),
param => ((CurrentChildViewModel != null) && (CurrentChildViewModel.CanExecuteEditSelectedItem))));
}
}
メソッドEditSelectedItemとCanExecuteEditSelectedItemを直接呼び出す点を除いて、ほぼ同等です。
ICommand _editSelectedItemCommand;
public ICommand EditSelectedItemCommand
{
get
{
return _editSelectedItemCommand ?? (_editSelectedItemCommand = new RelayCommand(param => EditSelectedItem(),
param => CanExecuteEditSelectedItem))));
}
}
私はこのようなコマンドを約10個、将来はおそらく50個以上必要としますので、今すぐ正しい方法でやりたいと思います。 これを防止するための方法はありますか?
申し訳ありませんが(IをWPFの初心者なので、ここで何か変更するには時間がかかりました)。あなたのソリューションはすばらしく動作し、コンバータについてもう少し分かりました。解決に時間を割いてくれてありがとう! –
私はそれをテストし、それは動作します、ありがとう。しかし、いくつかの方法では、IsEnabled = {Binding CurrentChildViewModel.CanExecuteSelectedItem}を呼び出して、その関数内でロジックを実装しなければならない場合や、その場合にConvertorが必要な場合、もっと複雑なIsEnabled機能が必要です。前もって感謝します。 –
私は追加の質問をhttp://stackoverflow.com/questions/9274498/relaycommands-from-view-to-child-viewに追加しました...私はこれが 'normal作業の方法'。 –