2010-08-20 1 views
3

내 MVVM 응용 프로그램이 App.xaml.cs로 시작되었습니다.MVVM - 어떻게 쇼보기?

여기에서 기본 창을 만듭니다. 그것은 프레임이 있습니다. 여기에 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 툴킷에 대해 아무것도 몰라,하지만 난 이런 짓을하는 간단한 방법이 그것을 할 수있는 위임, 같은 것이 었습니다 : (간체 코드)

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

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

    // ... 
} 

그래서 당신은을에 ' 이 코드를 호출하는 VM에서 '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 

}