2013-07-30 112 views
1

这可能很简单,但我们继续为此而努力。多个项目之间的Silverlight导航

我们使用Silverlight和MVVM,让我们说,我们有两个silverlight的类每一个视图,视图模型库。

如果我们有,说转到其他视图中的每个视图按钮,我们如何设置导航显示,而无需创建循环引用其他视图/视图模型?

回答

0

由于您使用的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; 
} 

请注意,我在上面使用的语法与this event aggregator that uses the RX extensions,但不管是同样的想法应适用其中MVVM框架,如果有的话,你使用。

+0

这基本上是我们正在做的......谢谢。 – AWeim