2010-08-20 6 views
3

Mon application MVVM a démarré avec App.xaml.csMVVM - comment afficher la vue?

Ici, je crée une fenêtre principale. Il a un cadre. Ici, je mets LoginView.

Il a le bouton "Connexion". J'ai une commande qui vérifie et se connecte.

Ce code que j'ai dans LoginViewModel. Si tout va bien - je devrais montrer la vue suivante. Comment je peux le faire?

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 
      } 
     } 

Comment et où j'afficher toutes les vues nécessaires? I Utilisez maintenant WPF MVVM Toolkit.

Répondre

0

Je ne sais rien au sujet de la boîte à outils MVVM, mais une façon simple je l'ai fait était d'avoir un délégué de le faire, quelque chose comme: (code simplifié)

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

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

    // ... 
} 

Vous avez donc un ' Action ShowNextScreen sur votre machine virtuelle qui appelle ce code.

J'ai a small app on Google Code qui fait cela (il s'occupe également de n'avoir qu'une seule forme ouverte, la gestion des erreurs, etc). Notez que dans ce cas, c'est ViewModel qui est responsable de l'ouverture de la vue.

Mais cela va se compliquer rapidement, pour toute taille raisonnable application que vous souhaitez partager cette fonctionnalité dehors dans une sorte de « contrôleur d'application » qui portait sur les écrans d'ouverture, la navigation, etc.

2

Dans Dans une situation comme celle-ci, vous pourriez avoir votre formulaire de démarrage comme programme principal, et le Login est une boîte de dialogue. Si la boîte de dialogue échoue, quittez le programme. Si cela réussit, procédez au chargement du formulaire principal.

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 

} 
Questions connexes