Caliburn.Micro を使用して、関連のない 2 つのビュー モデル間を移動する最も一般的な方法は何だろうと思っていました。アプリケーションの一部に、ParentViewModel->ChildVM1->ChildVM2 などのビュー モデルのツリーがあるとします。さらに、前述のビュー モデルのいずれかに移動できる OmniVM があります。「ナビゲート」とは、適切なインスタンスを見つけることを意味します (アクティベーション部分はその後簡単です)。IEventAggregator や Container.Resolve のようなものを使用したくありません。返信ありがとうございます
1 に答える
devdigital はコメントでそれを言ったので、ここでもう一度言います。ロブ(フレームワークを書いたアーキテクト)が言うように、アーキテクチャは UI でも重要です。これは、プレゼンテーション層がどのように構成されているかを考慮する必要があることを意味します。言い換えれば、メイン ウィンドウが Caliburn.Micro Conductor で、タブがスクリーンに導かれるタブ付きのインターフェイスを用意する予定ですか、それとも、ドッキング ウィンドウとツールバーを使用する Visual Studio のような UI を用意する予定ですか? UIを構築するときのこのタイプの考え方。アーキテクチャが好きではなく、GUI をデザインしたいだけなら、Screen と Conductor がナビゲーションで考慮すべき最も重要なクラスであると言えます。を読むことを強くお勧めしますScreens、Conductors、Compositionsの記事をまだ読んでいない場合は、ここから、私が話していることのアイデアと、役立つ考えがたくさん得られるでしょう。
編集:あなたの特定の状況では、この深くネストされた構造があるため、次のMenuViewModel
ようなナビゲーション用のインターフェイスを作成します:
public interface IMenuNavigator {
void NavigateToItem(Item i);
}
次に、これをそれらの内部ビュー モデルに挿入します。一方、あなたの状況のように、関連のないコンポーネント(ビューモデル)IEventAggregator
間の疎結合通信に使用される を使用することもできます。そのため、ナビゲーションのためにアグリゲーターにメッセージを公開し、それらをリッスンして正しく処理します。特定の内部状況に応じて、より良いアイデアを思いつくことさえあります。それが役立つことを願っています。MenuViewModel