多个项目之间的Silverlight导航
这可能很简单,但我们仍在努力解决这一问题 我们正在使用Silverlight和MVVM,假设我们有两个Silverlight类库,每个类库都有一个视图和视图模型多个项目之间的Silverlight导航,silverlight,Silverlight,这可能很简单,但我们仍在努力解决这一问题 我们正在使用Silverlight和MVVM,假设我们有两个Silverlight类库,每个类库都有一个视图和视图模型 如果每个视图上都有一个按钮,上面写着“转到其他视图”,那么如何设置导航以显示其他视图/视图模型而不创建循环引用?既然您使用的是MVVM,正确的做法是使用事件聚合器。每个视图模型都可能触发一个“NavigationRequested”事件,然后顶层应该侦听该事件并进行相应的导航。举个简单的例子: private void Applicat
如果每个视图上都有一个按钮,上面写着“转到其他视图”,那么如何设置导航以显示其他视图/视图模型而不创建循环引用?既然您使用的是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;
}
private void应用程序\u启动(对象发送方,StartupEventArgs e)
{
IEventPublisher publisher=new EventPublisher();
var viewModel=新的viewModel(publisher);
var view1=newview1{DataContext=viewModel};
var view2=newview2{DataContext=viewModel};
this.RootVisual=view1;
view1.DataContext=viewModel;
publisher.Get()
.ObserveOnDispatcher()
.Select(项=>item.ViewName)
.Subscribe(name=>RootVisual=name==“View1”?View1:view2);
this.RootVisual=view1;
}
请注意,我上面使用的语法来自,但是无论您使用的是哪个MVVM框架(如果有的话),都应该应用相同的思想