在MvvmCross Xamarin.Forms app

时间:2017-07-10 18:26:55

标签: xamarin.forms mvvmcross

我正在尝试在MvvmCross中创建一个简单的登录视图(使用Xamarin.Forms选项),在按下登录按钮后切换到另一个视图,但是当我执行this.ShowViewModel<MainViewModel>();或{{1 }}

它会留下一个导航后退按钮,将视图切换回登录视图。

如何显示不同的视图,但阻止其添加后退按钮?

以下是我的LoginViewModel.cs文件:

navigationService.Navigate<MainViewModel>();

这是我的LoginPage.xaml文件:

using System;
using System.Threading.Tasks;
using System.Windows.Input;
using MvvmCross.Core.Navigation;
using MvvmCross.Core.ViewModels;

namespace MvvmForms.MySampleApp.Core.ViewModels
{
    public class LoginViewModel : MvxViewModel
    {
        readonly IMvxNavigationService navigationService;

        public LoginViewModel(IMvxNavigationService navigationService)
        {
            this.navigationService = navigationService;
        }

        ...

        public ICommand ShowMainPageCommand => new MvxCommand(ShowInfoPage);

        private void ShowMainPage()
        {
            navigationService.Navigate<MainViewModel>();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

转到其他页面后,从导航堆栈中删除登录页面

推送你的页面

await Navigation.PushAsync(new MainPage());

现在,如果你有登录页面的引用,你可以

Navigation.RemovePage(loginPage);

否则在堆栈上找到您的页面并将其删除

 var pages = Navigation.NavigationStack.ToList();
  foreach (var page in pages)
     {
         if (page.GetType() == typeof(LoginPage))
              Navigation.RemovePage(page);
     }

答案 1 :(得分:0)

此方法可能适合您。

_navigation的类型为NaviagtionPage

页面是您希望成为新根的页面。

var root  = _navigation.Navigation.NavigationStack.First();
_navigation.Navigation.InsertPageBefore(page);
_navigation.PopToRootAsync();

这会将您的页面作为根页面插入并删除登录页面