我使用簡單的噴油器創建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