2017-04-04 8 views
2

私はxamarinの開発を行っていますが、私はフォームを作成していません。mvvmのライトで複数のビューモデルを戻す方法

私は3 viewcontrollers /活動による戻りたいが、GOBACK方法は、私は私は1つのより多くの時間がviewcontrolller /活動がadded.i.e 2つのインスタンスを取得すると信じてnavigateto使用している場合は1つのViewControllerまたは活動

で帰るためです。

この問題を解決するにはどうすればよいですか?

アップデート:ここで も同様THRナビゲーションスタックにアクセスし、あなたが戻っている場合は

enter image description here

答えて

2

、その後、INavigationService.GoBack();を使用する方法はありませんinavigationインタフェースです。それを3回連続して呼び出すと、3ページ戻ってくることができます。

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

しかし – Veeravel

+0

が、我々は移行せずに戻って3回行くことができれば、それが可能それが良いだろうトランジションをカットし、別の1がAtleastのトップ – Veeravel

+0

にプッシュされるようにそれが見えるようにすることです悪くtransistionません – Veeravel

2

私は以前MVVM Lightを使用していませんでしたが、私はXamarinフォームの経験がかなりあります。以前はMVVM Crossをナビゲーションに使用していましたが、Xamarin Forms Navigationで構築されたものがはるかに優れていることがわかりました。ここにあるものと同様のシナリオに遭遇しました。

MVVMライトがちょうどXamarinはとにかくナビゲーションフォームラップしているように見えるフードの下

- 私はあなたがMVVMライトナビゲーションにあきらめる必要があると思いませんが、あなたが達成するためにボンネットの下に取得する必要がありますhttp://mvvmlight.codeplex.com/SourceControl/latest#Samples/Flowers/Flowers.Forms/Flowers.Forms/Helpers/NavigationService.cs

3つの遷移を見ることなくナビゲーション。私はMVVM Lightでこれを試していませんが、通常のフォームナビゲーションでうまく動作します。

ステップ1

基礎となるXamarinフォームナビゲーションへのアクセスを取得します。

var navigation = Application.Current.MainPage.Navigation; 

ステップ2

あなたが戻ってナビゲートするときにスキップしたい2つのページを削除します。後ろをナビゲートする前に削除することが重要です。そうしないと、二重遷移(2番目のページから最後のページを削除したいからです)が表示されます。

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(); 

私はそれがあなたのために働く願っています。

代替検討

私はもう少しエレガントに解決してきた私のアプリで同様のアプリケーションを持っています。あなたが知っていれば、前のページに戻ってナビゲートする必要はありません。新しいページをオンにすると、不要になったページを削除することができます。の後にページを削除しなければならないことに注意してください。そうしないと、2つのトランジションが発生します。私は標準の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でコードを与えて、基礎となるナビゲーションスタックにアクセスします。 3つのステップを試しましたか? –

関連する問題