これは簡単なことかもしれませんが、私たちはこれと格闘し続けています。
Silverlight と MVVM を使用しており、それぞれ 1 つのビューとビュー モデルを持つ 2 つの Silverlight クラス ライブラリがあるとします。
各ビューに他のビューに移動するボタンがある場合、循環参照を作成せずに他のビュー/ビュー モデルを表示するようにナビゲーションを設定するにはどうすればよいでしょうか?
これは簡単なことかもしれませんが、私たちはこれと格闘し続けています。
Silverlight と MVVM を使用しており、それぞれ 1 つのビューとビュー モデルを持つ 2 つの Silverlight クラス ライブラリがあるとします。
各ビューに他のビューに移動するボタンがある場合、循環参照を作成せずに他のビュー/ビュー モデルを表示するようにナビゲーションを設定するにはどうすればよいでしょうか?
MVVM を使用しているため、イベント アグリゲーターを使用するのが適切でした。各ビュー モデルは "NavigationRequested" イベントをトリガーでき、トップ レベルはそのイベントをリッスンし、それに応じてナビゲートする必要があります。簡単な例として:
private void Application_Startup(object sender, StartupEventArgs e)
{
IEventPublisher publisher = new EventPublisher();
var viewModel = new ViewModel(publisher);
var view1 = new View1 { DataContext = viewModel };
var view2 = new View2 { DataContext = viewModel };
this.RootVisual = view1;
view1.DataContext = viewModel;
publisher.Get<NavigationRequested>()
.ObserveOnDispatcher()
.Select(item => item.ViewName)
.Subscribe(name => RootVisual = name == "View1" ? view1 : view2);
this.RootVisual = view1;
}
上記で使用している構文は、RX 拡張機能を使用するこのイベント アグリゲーターからのものですが、使用している MVVM フレームワークがある場合は、どの MVVM フレームワークに関係なく、同じ考え方が適用されることに注意してください。