2010-08-20 3 views
3

My MVVM приложение начато с App.xaml.csMVVM - как показать представление?

Здесь я создаю главное окно. Он имеет раму. Здесь я вставил LoginView.

У этого есть кнопка "Вход". У меня есть команда, которая проверяет и выполняет вход в систему.

Этот код у меня есть в LoginViewModel. Если все нормально - я должен показать следующий вид. Как я могу это сделать?

App.xaml.cs

 private void OnStartup(object sender, StartupEventArgs e) 
     { 
      LoginViewModel loginVM = new LoginViewModel();  
      MainView mainView = new MainView();    
      LoginView loginView = new LoginView(); 
      loginView.DataContext = loginVM; 
      mainView.Frame.Content = loginView; 
      mainView.Show(); 

     } 

LoginViewModel.cs

// this method calls by binding after Click Login in LoginView 
    private void Login() 
     { 
      //TODO: Realize it 
      if (LoginModel.Login("User1", "Password")) 
      { 
       // HERE I SHOULD CLOSE LOGINVIEW AND SHOW NEXT VIEW 
      } 
     } 

Как и где я должен показать все необходимые взгляды? Я использую WPF MVVM Toolkit.

ответ

0

Я ничего о MVVM Toolkit не знаю, но простой способ, которым я сделал это было есть делегат, чтобы сделать это, что-то вроде: (упрощенный код)

private void OnStartup(object sender, StartupEventArgs e) 
{ 
    LoginViewModel loginVM = new LoginViewModel(); 

    loginVM.ShowNextScreen +=() => { 
     SomeOtherVM nextVM = new SomeOtherVM(); 
     nextVM.ShowForm(); 
    } 

    // ... 
} 

Так у вас есть " ShowNextScreen "на вашей виртуальной машине, которая вызывает этот код.

У меня есть a small app on Google Code, который делает это (он также имеет только открытую форму, обработку ошибок и т. Д.). Обратите внимание, что в этом случае именно ViewModel несет ответственность за открытие представления.

Но это будет усложняться быстро, для любого разумного размера приложения вы хотели бы разделить эту функциональность в какое-то «контроллер приложения» который касается экранов открытия, навигация и т.д.

2

В такая ситуация, в которой вы могли бы включить свою стартовую форму, - это диалоговое окно. Если диалоговое окно выходит из строя, выйдите из программы. Если это удастся, приступайте к загрузке основной формы.

private void OnStartup(object sender, StartupEventArgs e) 
{ 
    LoginViewModel loginVM = new LoginViewModel(); 
    LoginView loginView = new LoginView();  
    loginView.DataContext = loginVM; 
    loginView.ShowDialog(); // Change this to a ShowDialog instead of Show  

    if (!login.DialogResult.GetValueOrDefault()) 
    { 
     // Should probably handle error in login class, not here"); 
     Environment.Exit(0); 
    } 

    // This code will never get reached if Login fails 
    MainView mainView = new MainView(); 
    mainView.Frame.Content = loginView; 
    mainView.Show(); // Change this to a ShowDialog instead of Show 

} 
Смежные вопросы