2017-04-04 10 views
2

나는 xamarin 개발을하고 있으며 양식을 작성하지 않았습니다.mvvm 조명에서 둘 이상의보기 모델을 되돌리려면

나는 3 viewcontrollers/활동에 의해 다시 가고 싶어하지만 난이 viewcontrolller/활동 added.i.e 두 개의 인스턴스를 얻을 한 번 더 생각 navigateto 내가 사용하는 경우 GoBack을 방법은 하나 개의 ViewController이나 활동

으로 돌아 가지입니다.

어떻게이 문제를 해결할 수 있습니까?

업데이트 : 여기 뿐만 아니라 THR 탐색 스택에 액세스 다시가는 경우

enter image description here

답변

2

, 다음 INavigationService.GoBack();를 사용하는 방법이없는 inavigation 인터페이스입니다. 세 번 연속 호출하여 3 페이지 뒤로 이동할 수 있습니다.

private void GoBackThree() 
{ 
    _navigationService.GoBack(); 
    _navigationService.GoBack(); 
    _navigationService.GoBack(); 
} 
+0

그러나 – Veeravel

+0

우리가 변화없이 다시 3 번을 갈 수 있다면 가능은 좋은 것 전환을 절감하고 또 다른 하나이어야 상단 – Veeravel

+0

에 밀려처럼 보이게하는 것입니다 나빠 보이지 전이시하지 않습니다 – Veeravel

2

저는 MVVM Light를 사용하지 않았지만 저는 Xamarin Forms에 대한 경험이 상당히 있습니다. 네비게이션을 위해 MVVM Cross를 사용 했었지만 Xamarin Forms Navigation에 내장 된 기능이 훨씬 뛰어났다는 것을 알았습니다. 여기에있는 것과 비슷한 시나리오가 나타났습니다. 난 당신이 MVVM 빛 탐색을 포기해야한다고 생각하지 않습니다 http://mvvmlight.codeplex.com/SourceControl/latest#Samples/Flowers/Flowers.Forms/Flowers.Forms/Helpers/NavigationService.cs

하지만 당신은 달성하기 위해 후드를 얻을 필요합니까 - MVVM 빛 그냥 자 마린 포장처럼 보이는 후드 아래에서

어쨌든 탐색 양식 3 개의 장면 전환을 보지 않고 탐색. 나는 이것을 MVVM Light로 시도하지는 않았지만, 일반적인 폼 네비게이션과 함께 잘 작동한다.

var navigation = Application.Current.MainPage.Navigation; 

2 단계

다시 탐색 할 때 생략 할 두 페이지를 제거 : 기본 자 마린에

1 단계

가져 액세스 탐색 형성한다. 당신이 뒤를 탐색하기 전에 그들을 제거하는 것이 중요합니다. 그렇지 않으면 당신은 두번의 전이를 할 것입니다.

var firstPageToRemove = navigation.NavigationStack[navigation.NavigationStack.Count - 2]; 
navigation.RemovePage(firstPageToRemove); 

var secondPageToRemove = navigation.NavigationStack[navigation.NavigationStack.Count - 2]; 
navigation.RemovePage(secondPageToRemove); 

3 단계

이동 뒤로

_navigationService.GoBack(); 

나는이 작품을 당신을 위해 노력하겠습니다.

대체 고려

나는 더 우아하게 조금 해결 한 내 응용 프로그램에서 비슷한 응용 프로그램이 있습니다. 이전 페이지로 되돌아 갈 필요가 없다는 것을 안다면. 새 페이지를 열 때 더 이상 필요하지 않으면 이전 페이지를 실제로 제거 할 수 있습니다. 다음에 페이지 을 제거해야합니다. 새 페이지를 밀면 그렇지 않으면 두 개의 전환이 발생합니다. 이 확장 방법을 표준 Forms Navigation의 맨 위에 배치하여 1 단계에서 액세스하는 방법을 보여 줬습니다.

public static async Task ReplaceCurrentAsync(this INavigation navigation, Page page, bool animated = false) 
{ 
    var curentPage = navigation.NavigationStack.Last(); 

    await navigation.PushAsync(page, animated); 

    navigation.RemovePage(curentPage); 
} 
+0

질문 업데이트를 친절하게 확인하십시오. – Veeravel

+1

MVVM 표시 등의 탐색 스택을 수행 할 방법이 없습니다. – Veeravel

+2

MVVM 표시 등에서 탐색 스택에 액세스 할 수있는 방법이 없습니다. 그래서 1 단계에서 기본 탐색 스택에 액세스 할 코드를 제공했습니다. 세 단계를 시도 했습니까? –