2015-04-13 4 views
0

Я пытаюсь перейти на новую страницу навигации из ViewModelПерейдите на новую страницу навигации из ViewModel с Xamarin XLabs

У меня есть этот фрагмент в моем App.cs, что делает новую страницу навигации и связывает ViewModel с The View

MainPage = new NavigationPage((Page)ViewFactory.CreatePage<MainViewModel, MainView>()); 

фрагмент из этой статьи getting started xamarin forms labs xaml mvvm ioc @ «5. Зарегистрируйте Вид с ViewFactory»

Но как бы мы делали это в ViewModel, и это имеет смысл создать новый страницы и привяжите ViewModel и Vi ew вместе, когда мы просто связали их с ViewFactory.Register?

Отрывок из статьи:

public class App : Application 
{ 
    public App() 
    { 
     RegisterViews(); 
     MainPage = new NavigationPage((Page)ViewFactory.CreatePage<MainViewModel, MainView>()); 
    } 

    private void RegisterViews() 
    { 
     ViewFactory.Register<MainView, MainViewModel>(); 
    } 
} 

ответ

2

Нет, что я undersant вашего вопроса, но, вот что я делаю: первой в вашей AppDelegate (или основная деятельности) зарегистрировать модуль Injection зависимостей (IDependencyContainer для simpleContainer здесь):

 var resolverContainer = new SimpleContainer(); 
     UserService us = new UserService(); 

     var app = new XFormsAppiOS(); 
     resolverContainer.Register<IDevice>(t => AppleDevice.CurrentDevice) 
      .Register<IDisplay>(t => t.Resolve<IDevice>().Display) 
      .Register<IXFormsApp>(app) 
      .Register<IJsonSerializer, JsonSerializer>() 
      .Register<IDependencyContainer>(resolverContainer); 
     Resolver.SetResolver(resolverContainer.GetResolver()); 

Тогда на вашем app.cs, обязательно зарегистрируйте навигационное обслуживание идет ти главной страницы навигации

Page loginPage = new NavigationPage((LoginPage)ViewFactory.CreatePage<LoginViewModel, LoginPage>()); 
MainPage = loginPage; 
Resolver.Resolve<IDependencyContainer>() 
    .Register<INavigationService>(t => new NavigationService(MainPage.Navigation)) //New Xlabs nav service 
    .Register<INavigation>(t => MainPage.Navigation); // old Xlabs nav service 

И в вашем ViewModel нажать на страницу вам нужен

await Resolver.Resolve<INavigation>().PushAsync((ParameterPage)ViewFactory.CreatePage<ParameterViewModel, ParameterPage>(), false); 
Смежные вопросы