在 MvvmCross Xamarin.Forms 应用中打开无导航视图
Open view without navigation in MvvmCross Xamarin.Forms app
我正在尝试在 MvvmCross 中创建一个简单的登录视图(使用 Xamarin.Forms 选项),它会在按下登录按钮后切换到另一个视图,但是当我执行类似 this.ShowViewModel<MainViewModel>();
的操作时或 navigationService.Navigate<MainViewModel>();
它留下一个导航后退按钮,可将视图切换回登录视图。
如何显示不同的视图但阻止它添加后退按钮?
下面是我的 LoginViewModel.cs 文件:
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>();
}
}
}
这是我的 LoginPage.xaml 文件:
<?xml version="1.0" encoding="utf-8"?>
<mvx:MvxContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:forms="using:Xamarin.Forms"
xmlns:mvx="clr-namespace:MvvmCross.Forms.Core;assembly=MvvmCross.Forms"
x:Class="MvvmForms.MySampleApp.Core.Pages.LoginPage"
Title="Login Page"
>
<mvx:MvxContentPage.Padding Thickness="5, 0, 5, 95">
<OnPlatform x:TypeArguments="Thickness">
<On Platform="Android" Value="5, 0, 5, 0" />
<On Platform="iOS" Value="5, 20, 5, 0" />
</OnPlatform>
</mvx:MvxContentPage.Padding>
<StackLayout Spacing="10" Orientation="Vertical">
<Label FontSize="24" Text="Enter your nickname in the box below" />
<Entry Placeholder="Who are you?" TextColor="Red" Text="{Binding YourNickname}" />
<Label FontSize="24" Text="{Binding Hello}" />
<Button x:Name="LoginButton" Text="Login" Command="{Binding ShowMainPageCommand}" />
</StackLayout>
转到另一个页面后从导航堆栈中删除登录页面
给你推送页面
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);
}
此方法可能适合您。
_navigation 的类型为 NaviagtionPage
page 是您希望成为新根的页面。
var root = _navigation.Navigation.NavigationStack.First();
_navigation.Navigation.InsertPageBefore(page);
_navigation.PopToRootAsync();
这会将您的页面作为根页面插入并删除登录页面
我正在尝试在 MvvmCross 中创建一个简单的登录视图(使用 Xamarin.Forms 选项),它会在按下登录按钮后切换到另一个视图,但是当我执行类似 this.ShowViewModel<MainViewModel>();
的操作时或 navigationService.Navigate<MainViewModel>();
它留下一个导航后退按钮,可将视图切换回登录视图。
如何显示不同的视图但阻止它添加后退按钮?
下面是我的 LoginViewModel.cs 文件:
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>();
}
}
}
这是我的 LoginPage.xaml 文件:
<?xml version="1.0" encoding="utf-8"?>
<mvx:MvxContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:forms="using:Xamarin.Forms"
xmlns:mvx="clr-namespace:MvvmCross.Forms.Core;assembly=MvvmCross.Forms"
x:Class="MvvmForms.MySampleApp.Core.Pages.LoginPage"
Title="Login Page"
>
<mvx:MvxContentPage.Padding Thickness="5, 0, 5, 95">
<OnPlatform x:TypeArguments="Thickness">
<On Platform="Android" Value="5, 0, 5, 0" />
<On Platform="iOS" Value="5, 20, 5, 0" />
</OnPlatform>
</mvx:MvxContentPage.Padding>
<StackLayout Spacing="10" Orientation="Vertical">
<Label FontSize="24" Text="Enter your nickname in the box below" />
<Entry Placeholder="Who are you?" TextColor="Red" Text="{Binding YourNickname}" />
<Label FontSize="24" Text="{Binding Hello}" />
<Button x:Name="LoginButton" Text="Login" Command="{Binding ShowMainPageCommand}" />
</StackLayout>
转到另一个页面后从导航堆栈中删除登录页面
给你推送页面
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);
}
此方法可能适合您。
_navigation 的类型为 NaviagtionPage
page 是您希望成为新根的页面。
var root = _navigation.Navigation.NavigationStack.First();
_navigation.Navigation.InsertPageBefore(page);
_navigation.PopToRootAsync();
这会将您的页面作为根页面插入并删除登录页面