私はここでCaliburnMicroのドキュメントを調べていました。同時に、私は実験のためにいくつかの大まかなコードを作成しようとしていました。コンテナを使用してアイテムをアクティブ化する方法と、アクティブ化するViewModelにオブジェクトを渡す方法について少し混乱しています。
マスター/詳細シナリオを考えてみましょう。マスターにはリスト(たとえばdatagrid)が含まれ、詳細には更新用のマスターからの特定の行(たとえばタブコントロール内のタブアイテム)が含まれます。ドキュメント(理解を容易にするため)では、ViewModelの詳細は次のようなコードを使用して直接インスタンス化されたと思います
public class ShellViewModel : Conductor<IScreen>.Collection.OneActive {
int count = 1;
public void OpenTab() {
ActivateItem(new TabViewModel {
DisplayName = "Tab " + count++
});
}
}
したがって、上記の基本的な概念を実際のアプリに適用するには、コンテナー(たとえばMEF)を使用してDetailViewModel(上記のTabViewModel)をインスタンス化する必要があります。その場合の課題は、特定のDetailViewModelがTABコントロールですでに開かれているかどうかを知ることです。私が頭に浮かんだのは、開いているタブのリスト(DetailViewModels)を維持することでした。しかし、その後、MasterViewModelでDetailViewModelを再度参照し、目的を無効にします。この問題を解決するために利用できるオプションはありますか?
私を悩ませている2番目のことは、MasterViewModel(選択された詳細アイテム)からDetailViewModelにオブジェクトを渡す方法です。ここでEventAggregatorを使用すると、開いたDetailViewModelのそれぞれが、処理方法がわからないイベントを受け取ります。
誰かが上記の2つの問題に光を当てることができれば、私は感謝します
更新: マスターはこのような指揮者です
public class MainViewModel : Conductor<IScreen>.Collection.OneActive, IShell {
....
}
そして詳細はこのように定義されています
public class TabViewModel : Screen {
....
}
両方が同じウィンドウにあります。