Как перемещаться по модальным страницам в Xamarin.Forms, используя Fre sh .MVVM - PullRequest
0 голосов
/ 08 февраля 2020

Я пытался создать модальную страницу в приложении xamarin для форм с помощью MVVM при нажатии кнопки. Я уже знаю, как использовать стеки навигации, но не знаю, как это сделать со страницами контента в качестве модальных страниц, я пробовал несколько вещей, особенно вызывая метод PushPageModel.

Это последнее, что я пробовал : Просмотр или Страница:

<Label
                x:Name="forgottenPasswordLabel"
                Text="Forgot password?"
                TextColor="LightPink"
                FontSize="16"
                FontAttributes="Bold"

                VerticalOptions="Start"
                HorizontalOptions="End"
                Margin="25,0,25,25">
                <Label.GestureRecognizers>
                    <TapGestureRecognizer Command="{Binding ForgotPasswordCommand}"/>
                </Label.GestureRecognizers>
</Label>

Класс ViewModel:

public class LogInViewModel : FreshBasePageModel
    {
        public ICommand ForgotPasswordCommand { get; set; }

        public LogInViewModel()
        {
        }

        public override void Init(object initData)
        {
            ForgotPasswordCommand = new Command (async() =>
            {
                var newPage = FreshPageModelResolver.ResolvePageModel<ForgottenPasswordViewModel>();
                await CoreMethods.PushPageModel<ForgottenPasswordViewModel>(null, false, true);
            }); 
        }
    }

Класс App.xaml.cs:

public App()
        {
            InitializeComponent();

            MainPage = FreshPageModelResolver.ResolvePageModel<LogInViewModel>();
        }

Этот код выдает следующую ошибку: " FreshTinyIo C .TinyIoCResolutionException: 'Не удалось разрешить: IFreshNavigationService "

И это все, если вам нужна дополнительная информация, я предоставлю ее, как только увижу ваш запрос, спасибо всем за ваше время, надеюсь, что вы хорошего дня.

Редактировать: Запрошенная трассировка стека:

в FreshTinyIo C .FreshTinyIoCContainer.ResolveInternal (FreshTinyIo C .FreshTinyIoCContainer + регистрация типа регистрации, FreshTinyIo C .NamedParameterOverloads параметры, параметры FreshTinyIo C .ResolveOptions) [0x000f7] в C: «Здесь идет путь» в FreshTinyIo C .FreshTinyIoCContainer.Res olve (System.Type resolType, имя System.String) [0x00000] в C: \ "Здесь идет путь" в FreshTinyIo C .FreshTinyIoCContainer.Resolve [ResolveType] (System.String name) [0x00000] в C: «Здесь идет путь» в FreshMvvm.FreshTinyIOCBuiltIn.Resolve [ResolveType] (имя System.String) [0x00000] в C: «Здесь идет путь» в FreshMvvm.PageModelCoreMethods.PushPageModelWmarPageMage (X) page, FreshMvvm.FreshBasePageModel pageModel, данные System.Object, модал System.Boolean, анимация System.Boolean) [0x00177] в C: «Здесь идет путь» в FreshMvvm.PageModelCoreMethods.PushPageModel (FreshMvvMMFF). Данные объекта, модальный System.Boolean, анимация System.Boolean) [0x00048] в C: «Здесь идет путь» в FreshMvvm.PageModelCoreMethods.PushPageModel [T] (данные System.Object, модальный System.Boolean, System.Boolean animate) [0x00040] в C: «Здесь идет путь» в FirstApp.ViewModels.LogInViewModel.b__5_0 () [0x0003a] в D: \ «Здесь идет па th "

1 Ответ

0 голосов
/ 09 февраля 2020

Проблема заключалась в неправильном понимании концепций, я думал, что страница контента и страница навигации - это два разных типа страниц, такие как страница с вкладками, главная страница с подробным описанием, страница с каруселью и страница с контентом. Поэтому я пытался не использовать следующий код, думая, что FreshNavigationContainer заставил меня использовать страницу навигации, а не страницу контента, что является правдой, но не полностью, потому что да, это заставляет вас использовать страницу навигации, но вы также используете страница контента, поскольку страница навигации является свойством страницы контента, поэтому, как я уже сказал, все это было неправильное понимание концепций:

public partial class App : Application
    {
        public App()
        {
            InitializeComponent();

            var thePage = FreshPageModelResolver.ResolvePageModel<LogInViewModel>();
            MainPage = new FreshNavigationContainer(thePage);
        }
}

Я не сказал этого по этому вопросу, но цель всех из этого было не видеть панель в верхней части экрана, и теперь я понимаю, что, поскольку страница навигации и страница контента не являются двумя разными вещами, вы можете сделать это в page.xaml с помощью:

<ContentPage NavigationPage.HasNavigationBar="False">
...