Как открыть страницу из App.xaml.cs, если она еще не открыта

У меня есть приложение Xaml.Forms, использующее FreshMVVM. Я открываю определенную страницу из app.xaml.cs следующим образом:

        Xamarin.Forms.Device.BeginInvokeOnMainThread(async () =>
        {
            var navService = FreshIOC.Container.Resolve<IFreshNavigationService>(FreshMvvm.Constants.DefaultNavigationServiceName);
            Page page = FreshPageModelResolver.ResolvePageModel<SomePageModel>();
            await navService.PushPage(page, null);

    ...
        });

Но мне нужно добавить проверку, чтобы предотвратить это, если эта страница уже открыта. Как сделать такую ​​проверку?


person David Shochet    schedule 24.12.2020    source источник


Ответы (1)


Добавьте статическое логическое значение в класс App, чтобы проверить, была ли открыта страница:

public partial class App : Application
{
    public static bool isPageOpened;
    public App()
    {
        InitializeComponent();

        MainPage = new MainPage();
    }

    public void test()
    {

        if (App.isPageOpened = false)
        {
            Xamarin.Forms.Device.BeginInvokeOnMainThread(async () =>
            {
                var navService = FreshIOC.Container.Resolve<IFreshNavigationService>(FreshMvvm.Constants.DefaultNavigationServiceName);
                Page page = FreshPageModelResolver.ResolvePageModel<SomePageModel>();

                App.isPageOpened = true;

                await navService.PushPage(page, null);
            });
        }
    }
}

И в методе OnDisappearing страницы установите для isPageOpened значение false:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    protected override void OnDisappearing()
    {
        base.OnDisappearing();

        App.isPageOpened = false;
    }
}
person Jack Hua    schedule 25.12.2020
comment
Спасибо за ваш ответ. Я думаю, что могу использовать его. Но могу я сначала спросить, нет ли способа просто узнать, какая страница открыта в данный момент? - person David Shochet; 25.12.2020
comment
Нет, я не думаю, что есть такой способ. Вы можете попробовать проверить navigation.childern[0]. - person Jack Hua; 28.12.2020
comment
@DavidShochet Мое решение работает для вас? Если да, не могли бы вы принять его (нажмите ☑️ в верхнем левом углу этого ответа), чтобы мы могли помочь большему количеству людей с такой же проблемой :). - person Jack Hua; 28.12.2020
comment
это действительно работает, большое спасибо! - person David Shochet; 28.12.2020