私は Caliburn.Micro をいじっていて、今はとてもシンプルなアプリケーションを持っています。
これには AppView があり、実際には NavigationBar、InnerView、および StatusBar の ContentControl があります。
ここで、異なる内部ビュー間のナビゲーションを処理したいと考えています。
現在、eventaggregator を使用して NavigationEvent を公開しています。これにより、メインウィンドウのインナービューが別のビューに切り替えられます。
これがPublishへの呼び出しです(すべてのInnerViewには、IEventAggregatorを持つ同じ基本クラスがあります)
public void NavigateOverview()
{
base._eventAggregator.Publish(new NavigateEvent("OverviewViewModel"));
}
現在、NavigateEvent を処理する AppViewModel に文字列を渡しています。
public void Handle(NavigateEvent navigate)
{
InnerViewModel target;
switch (navigate.TargetViewModel)
{
case "SelectProjectViewModel":
{
target = new SelectProjectViewModel(_eventAggregator);
break;
}
case "OverviewViewModel":
{
target = new OverviewViewModel(_eventAggregator);
break;
}
default:
{
throw new InvalidOperationException("no target type found");
}
}
this.CurrentInnerViewModel = target;
}
文字列を渡すことは機能しますが、エラーが発生しやすく、あまりきれいではありません。
それを処理するカリバーンの方法は何ですか?それがコンダクターのするべきことですか?