私は WPF と MVVM が初めてで、両方を利用するアプリケーションに取り組んでいます。このアプリケーションは Windows エクスプローラーに似ているため、メニュー付きのメイン ウィンドウ (ShellViewModel)、ツリー コントロール (TreeViewModel)、およびリスト コントロール (ListViewModel) を備えたアプリを検討してください。Edit -> Delete などのメニュー項目を実装したいと考えています。これは、現在選択されている項目 (ツリーまたはリスト内にある可能性があります) を削除します。
Josh Smith の RelayCommand を使用しており、ShellViewModel で menuitem を DeleteItemCommand にバインドするのは簡単です。ただし、DeleteItemCommand を実装するには、ShellViewModel と 2 つの子ビュー モデル (TreeViewModel と ListViewModel) との間のかなり緊密な結合が必要であり、フォーカス/選択を追跡し、アクションを適切な子に向けて実装する必要があります。それは私には間違っているようで、何かが足りないと思います。
ブックキーピングを行うためのフォーカス マネージャーやセレクション マネージャーを作成することはそれほど難しくないように思われ、クラスを結合しなくても実行できます。ウィンドウ システムは、どのビューにフォーカスがあるかを既に追跡しており、コードを複製しているように見えます。
私がよくわからないのは、コマンドを ShellViewModel から ListViewModel または TreeViewModel のいずれかにルーティングして、コードを混乱させることなく実際の作業を行う方法です。いつの日か、アプリケーションは 2 つ以上の子を含むように拡張される予定です。その拡張をできる限り無痛にするために、シェルが子をできる限り無視するようにしたいと考えています。
いくつかのサンプル WPF/MVVM アプリケーション (Karl Shifflett の CipherText、Josh Smith の MVVM Demoなど) を見ても、これを行うコードは見たことがありません (または理解できませんでした)。
私のアプローチが根本から外れていると思われるか、小さなニュアンスが欠けているだけであるかに関係なく、あなたの考えを共有して、私が軌道に乗るのを手伝ってください. ありがとう!