我使用简单的喷油器创建IoC容器。我把这里的模式:简单的喷油器 - 注册集合
Page Navigation using MVVM in Store App
当我问到上面的帖子评论,我想注册INavigationPage的集合。我做了这样的:
private static void RegisterNavigationPages()
{
Container.RegisterCollection<INavigationPage>(new []
{
typeof(MainNavigationPage),
typeof(SecondNavigationPage)
});
}
容器我的ViewModels和的NavigationService到里面:
Container.Register<INavigationService, NavigationService>(Lifestyle.Singleton);
Container.Register<IMainViewModel, MainViewModel>(Lifestyle.Singleton);
Container.Register<ISecondViewModel, SecondViewModel>(Lifestyle.Singleton);
这是这样,我怎么设置页面的DataContext:
DataContext = App.Container.GetInstance<IMainViewModel>();
一切都OK但我想在ViewModel构造函数中使用该集合中的NavigationPages。我可以通过索引做到这一点:
public SecondViewModel(INavigationService navigationService, IEnumerable<INavigationPage> navigationPageCollection)
{
NavigationService = navigationService;
_navigationPage = (navigationPageCollection.ToList())[0];
GoToMainPageCommand = new Command(GoToMainPageAction);
}
但它并不是完美的解决方案,因为当我改变NavigationPages的顺序我将不得不改变所有索引在整个应用程序。当我能够识别哪个NavigationPage我想在ViewModel构造函数中使用时,它是否有任何解决方案?
我不能通过typeof来实现,因为NavigationPage类型在UIProject中,而且我无法从ViewModel项目中获取引用,因为存在循环引用依赖关系。
所以'SecondViewModel'只需要与MainNavigationPage一起工作,还是需要更多的导航页面迭代呢? – Steven
现在只有该页面,但在未来可能会需要更多的分页。几个不同的页面可以有几个按钮。它只是应用程序的骨架。目标是约10页与查看模型。 – darson1991