2012-03-07 3 views
1

저는 대학 프로젝트를 위해 작은 인위적인 WPF 응용 프로그램을 작성 중이며 MVVM 패턴을 배울 수있는 기회를 갖게됩니다. 로그인 페이지가 될 초기 시작 창을 구현했습니다.ViewModel에서 어떻게 이동합니까?

LoginViewModel과 함께 주입 된 ICommand에서 파생 된 명령에 로그인 단추를 바인딩했습니다. LoginViewModel은 내가 만든 WCF 서비스를 통해 고객의 유효성을 검사합니다.

내 질문은 viewmodel에서 유효성 검사가 올바른 것으로 알림을 받으면 viewmodel에서 다음 페이지/창으로 이동해야합니까? viewmodel 내에서 새 창 인스턴스를 만들고 싶지 않습니다. 대신 여기에 페이지를 사용해야합니까? 처음부터 모범 사례를 이해하는 데 열중하고 있습니다. 이렇게하는 나쁜 방법을 배우는 데 시간을 낭비하고 싶지 않습니다.

감사합니다.

답변

0

페이지를 완료하지 않았지만 로그인 화면에서 LoginViewModelLoggedInEvent으로 노출 될 수 있습니다.

LoggedInEvent이 발생하면 부모 ViewModel에서 LoginViewModel을 생성하고 다시 파괴 할 수 있습니다. 필요한 모든 새로운보기를 만들 수 있습니다.

1

보기를 변경하는 대신보기 모델을 변경하고 ContentControl을 사용하여 특정보기에보기 모델을 바인딩 할 수 있습니다. 명령을 통해보기 변경 사항을 관리하는 다른보기 상단에 기본보기 만들기 (이 예제에서는 CurrentViewModel) 명령 처리기에서 :

<UserControl.Resources> 
     <DataTemplate DataType="{x:Type vm:LoginViewModel}"> 
      <local:LoginView/> 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type vm:FirstPageViewModel}"> 
      <local:FirstPageView/> 
     </DataTemplate> 
    </UserControl.Resources> 
    <ContentControl Content="{Binding Path=CurrentViewModel}" /> 

당신이보기 및 ViewModels를 혼합 할 필요가 없습니다 이런 식으로, 당신은 가상 머신에서 뷰를 생성하지 않는. 실제로 제 경우에는 이벤트로 뷰 변경을 요청한 아이 페이지였습니다.

관련 문제