Как перемещаться по модальным страницам в Xamarin.Forms с помощью Fresh.MVVM

Я пытался нажать модальную страницу в моем приложении форм 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>();
        }

Этот код дает следующую ошибку: «FreshTinyIoC.TinyIoCResolutionException: 'Ошибка разрешения: IFreshNavigationService»

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

Изменить: запрошена трассировка стека:

в параметрах FreshTinyIoC.FreshTinyIoCContainer.ResolveInternal (FreshTinyIoC.FreshTinyIoCContainer + регистрация TypeRegistration, FreshTinyIoC.NamedParameterOverloads, FreshTinyIoC.ResolveOptions) [0x000.FinyOptions параметры системы Имя строки) [0x00000] в C: \ "Вот путь" в FreshTinyIoC.FreshTinyIoCContainer.Resolve [ResolveType] (System.String name) [0x00000] в C: «Вот путь» в FreshMvvm.FreshTinyIOCBuiltIn.Resolve [ ResolveType] (имя System.String) [0x00000] в C: «Вот путь» в FreshMvvm.PageModelCoreMethods.PushPageModelWithPage (страница Xamarin.Forms.Page, FreshMvvm.FreshBasePageModel pageModel, System.Object mod, данные System.Oboob .Boolean animate) [0x00177] в C: «Вот и путь» в FreshMvvm.PageModelCoreMethods.PushPageModel (FreshMvvm.FreshBasePageModel pageModel, System.Object data, System.Boolean modal, System.Boolean animate) [ 0x00048] в C: «Вот идет путь» в FreshMvvm.PageModelCoreMethods.PushPageModel [T] (System.Object data, System.Boolean modal, System.Boolean animate) [0x00040] в C: «Вот идет путь» в FirstApp .ViewModels.LogInViewModel.b__5_0 () [0x0003a] в D: \ "Вот и путь"


person Jaime Santos    schedule 08.02.2020    source источник
comment
Насколько я понимаю через исключение, в вашем ForgottenPasswordViewModel или представлении есть что-то, что вызывает эту проблему, что-то может вызывать исключение, или вы не следовали структуре папок, или FreshMVVM сейчас, чтобы нам было легче понять это вам нужно будет добавить сюда Stracktrace для этого исключения!   -  person FreakyAli    schedule 08.02.2020
comment
@FreakyAli, как мне получить трассировку стека для исключения   -  person Jaime Santos    schedule 08.02.2020
comment
Добавьте блок try-catch в блок catch, когда генерируется исключение, объект исключения содержит ваш StackTrace! Если у вас есть исключения, это лучшее место для поиска проблемы!   -  person FreakyAli    schedule 08.02.2020
comment
@FreakyAli Я обновил этот вопрос с помощью StackTrace!   -  person Jaime Santos    schedule 08.02.2020
comment
Не удается найти экземпляр IFreshNavigationService, поэтому я не думаю, что вы правильно инициализировали FreshMVVM. В какой-то момент TinyIOC нужно сообщить, как создать экземпляр службы навигации. Сомневаюсь, что он работает и с немодальными страницами.   -  person Ben Reierson    schedule 08.02.2020


Ответы (1)


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

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

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

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

<ContentPage NavigationPage.HasNavigationBar="False">
person Jaime Santos    schedule 09.02.2020