문제

로그인하는 Windows Universal 앱이 있습니다. 이러한 종류의 응용 프로그램을 사용하는 전형적인 시나리오는 다른 상태입니다. 예를 들어 사용자가 아직 처음으로 로그인할지 또는 사용자가 이미 이전에 로그인했는지 여부와 앱을 다시 다시 열 수 있습니다. 여기에 의존하는 동작

ifloggedin - 홈페이지 표시 || ifnotloggedIn - loginPage 표시

이제는 조건 (상태)을 기반으로합니다. 우리는 다른 페이지를 표시해야합니다.

내 질문은 그러나 나는 MVVM에서 동일한 것을 구현하는 방법을 이해 하고이 조건부 논리를 넣을 수있는 올바른 위치는 무엇인지 이해하고 싶었습니다.

app.xaml.cs에 넣는 것은 문제를 해결하지만 opp.xaml.cs를 엉망으로 엉망으로 엉망으로 isoldmodel이 상호 작용 논리를 처리하지 않기 때문에 mvvm을 위반합니다.

시도한 솔루션은

  1. 중간 페이지 (Intermediate.xaml)를 만듭니다.
  2. 위의 해당 뷰 모드 (InterMediateViewModel.cs)를 생성합니다.
  3. 이 뷰 모델의 생성자는 조건부 명령문을 통합하여 탐색 할 페이지를 결정합니다.
  4. BOOL 변수 isLoggedIn에 내 조건을 가지고 있다고 가정 해 봅시다. 조건부 검사를 어디에 넣을 수 있습니까?

    내 InterMediateViewModel의 코드는 다음과 같습니다

    public bool IsLoggedIn {get; set;}
    //IsLoggedIn contains the condition of whether the user is logged-in or not-logged-in
    
    public IntermediateViewModel()
    {
        if (IsLoggedIn == false) 
        {
            NavigationService.Navigate("LoginPage");
        }
        else if (IsLoggedIn == true)
        {
            NavigationService.Navigate("HomePage");
        }
    }
    
    .

    이 솔루션의 문제점은 이제 BACKSTACK에 페이지 (Intermediate.xaml)가 하나 더 있습니다. 이것을 제거하는 방법이 있습니까?

    유사한 솔루션은 Windows Universal Apps (Windows 8.1 / Windows Phone 8.1)와 관련된 것처럼 보이지 않습니다.

    누구든지 MVVM으로 올바른 방식으로 이것을 구현하는 방법을 알고 있습니까?

도움이 되었습니까?

해결책

잘,이 경우 MVVM은 뷰가 선택되기 전에 발생해야하기 때문에 MVVM이 유지되지 않습니다.논리가 포함 된 클래스 ( 'Navigator'또는 무엇이)를 만들고, 하드 코딩 된 초기 페이지 대신에 사용하는 속성 ( 'InitialPage)을 제공하여 첫 페이지로 이동합니다.~을 빼앗아가는 것이렇게하면 앱 클래스의 외부에 당신의 논리를 유지하고 그것에 할 수있는 수정이 거의 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top