簡體   English   中英

Shell 導航

[英]Shell Navigation

我有一個登錄/注冊頁面,我希望能夠在它們之間導航路由導航 (//LoginPage),就像在 web 應用程序中一樣。 我真的不能讓它工作。 我已經構建了一個 AppShell.xaml 頁面,並且我已經在 App.xaml.cs 中注冊了我的 LoginPage 和 RegisterPage (我已經嘗試在 AppShell.xaml2 中注冊它們)注冊頁面,但是當我單擊按鈕導航時,我得到了這個

System.NullReferenceException:“對象引用未設置為 object 的實例。”

這是我的視圖模型

namespace Appointments.ViewModels
{
    public class RegLogViewModel : BaseViewModel
    {
        public AsyncCommand GoToRegisterCommand { get; }
        public AsyncCommand GoToLoginCommand { get; }
        public RegLogViewModel()
        {
            GoToLoginCommand = new AsyncCommand(GoToLogin);
            GoToRegisterCommand = new AsyncCommand(GoToRegister);
        }
async Task GoToRegister()
        {
            await Shell.Current.GoToAsync($"//{ nameof(RegisterPage)}");
        }

        async Task GoToLogin()
        {
            await Shell.Current.GoToAsync($"//{ nameof(LoginPage)}");
        }   
}

我的 AppShell.xaml

<Shell xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Appointments.AppShell"
             xmlns:views="clr-namespace:Appointments.Views">

     //// I HAVE TRIED WITH AND WITHOUT THIS  SHELLCONTENT\\\\\

    <ShellContent Route="LoginPage" ContentTemplate="{DataTemplate views:LoginPage}"/>
    <ShellContent Route="RegisterPage" ContentTemplate="{DataTemplate views:RegisterPage}"/>
</Shell>

我的 AppShell.xaml.cs

namespace Appointments
{

    public partial class AppShell : Shell
    {
        public AppShell()
        {
            InitializeComponent();
        }
    }
}

我的應用程序.xaml.cs

namespace Appointments
{
    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();
 
            MainPage = new LoginPage();
        }
    }
}

並登錄.xaml

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             xmlns:viewmodels="clr-namespace:Appointments.ViewModels"
             x:DataType="viewmodels:RegLogViewModel"
             x:Class="Appointments.Views.LoginPage">

    <ContentPage.Content>
        <StackLayout>
            <Label 
                Text="Login Page!"
                FontSize="Title"
                VerticalOptions="CenterAndExpand" 
                HorizontalOptions="CenterAndExpand" />
            
            <Label
                Text="{Binding Name}"/>

            <Entry
                Text="{Binding Name}"/>

            <Button
                Text="Go To Registration"
                Command="{Binding GoToRegisterCommand}"/>
            
            <ActivityIndicator IsRunning="{Binding IsBusy, Mode=OneWay}"/>
        </StackLayout>

    </ContentPage.Content>
</ContentPage>

問題是在 App.xaml.cs 我有

MainPage = new LoginPage();

但我不得不使用

MainPage = new AppShell();

它會工作,但現在我不明白應用程序如何知道首先打開我的 LoginPage 而不是 RegisterPage 或任何其他頁面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM