Использование временной шкалы для перехода на страницу сведений о приложении - PullRequest
0 голосов
/ 31 августа 2018

В моем приложении у меня есть главное меню, «страница списка» и «страница сведений». Информация на странице списка передается в качестве параметра на страницу сведений.

Я пытаюсь использовать временную шкалу, чтобы вернуться на страницу сведений моего приложения, создав ActivationUri на странице сведений, а затем связанный код в App.xaml.cs в OnActivation. Однако, когда я щелкаю элемент на временной шкале, приложение просто переходит на домашнюю страницу по умолчанию. Я думаю, проблема в том, что приложение не «запоминает» переданный параметр, когда я использую временную шкалу.

Любой совет по этому поводу, если это вообще возможно, был бы очень признателен. Спасибо.

App.xaml.cs:

DetailPage detailpage = new DetailPage();
var mylink = detailpage.pageid;

if (uriArgs.Uri.Host == mylink)
{
    NavigationService.Navigate(typeof(DetailPage), uriArgs);
}

DetailPage.xaml.cs:

public string pageid;

    public DetailPage()
    {
        this.InitializeComponent();
    }

    protected override async void OnNavigatedTo    (NavigationEventArgs e)
    {
        var MyClickedItem = (MyModel)e.Parameter;
        Title.Text = MyClickedItem.Title;
        pageid = MyClickedItem.Id;

        // Get channel and create activity.
        UserActivityChannel channel =     UserActivityChannel.GetDefault();
        UserActivity activity = await     channel.GetOrCreateUserActivityAsync("details" + MyClickedItem.Id);

        // Set deep-link and properties.
        activity.ActivationUri = new Uri("my-app://" +     MyClickedItem.Id);
        activity.VisualElements.DisplayText = Title.Text;
    }   

1 Ответ

0 голосов
/ 04 сентября 2018

Во-первых, я уточняю, что DetailPagePage в вашем образце соответствует DetailPage в вашем коде выше.

Причина, по которой переменная stuff (mylink в приведенном выше коде) является нулевой, заключается в том, что вы создаете новый объект класса DetailPagePage, который не является тем же объектом DetailPagePage, к которому вы переходили при нажатии GridView. вещь. Когда вы создаете новый объект DetailPagePage, этому новому DetailPagePage объекту pageid не присваивается значение, поэтому он равен нулю.

Вы можете изменить свойство pageid на статическое свойство класса DetailPagePage, затем вы можете получить доступ к тому же pageid в App.xaml.cs,

В DetailPagePage вам просто нужно изменить pageid на статический,

public static string pageid;

Затем, в вашем OnActivated методе App.xaml.cs, так как uriArgs.Uri.Host делает строчные буквы Title, при сравнении с pageid вам нужно вызвать метод ToLower(). Таким образом, метод OnActivated будет выглядеть так:

protected override async void OnActivated(IActivatedEventArgs args)
{
    await ActivationService.ActivateAsync(args);

    if (args.Kind == ActivationKind.Protocol)
    {
        var uriArgs = args as ProtocolActivatedEventArgs;

        if (uriArgs != null)
        {
            //DetailPagePage detailpage = new DetailPagePage();
            var stuff = DetailPagePage.pageid;

            if (uriArgs.Uri.Host == stuff.ToLower())
            {
                NavigationService.Navigate(typeof(DetailPagePage), uriArgs);
            }
        }
        Window.Current.Activate();
    }
}

После этого вам также нужно изменить параметр навигации uriArgs и метод DetailPagePage *1033*, поскольку uriArgs не может быть преобразован в MyModel, возможно, вам придется использовать данные параметров навигации для создания объекта MyModel с такой же информацией для их отображения.

--- Обновление ---

вам может понадобиться использовать данные параметров навигации для создания объекта MyModel с такой же информацией, чтобы отобразить их.

То есть, вы можете создать новый объект MyModel, который имеет то же значение свойства, что и объект MyModel, который вы щелкнули в методе OnActivated, а затем передать этот объект в метод Navigate, поэтому метод OnActivated будет таким:

protected override async void OnActivated(IActivatedEventArgs args)
{
    await ActivationService.ActivateAsync(args);

    if (args.Kind == ActivationKind.Protocol)
    {
        var uriArgs = args as ProtocolActivatedEventArgs;

        if (uriArgs != null)
        {
            //DetailPagePage detailpage = new DetailPagePage();
            var stuff = DetailPagePage.pageid;
            MyModel parameter = null;
            if (uriArgs.Uri.Host == stuff.ToLower())
            {
                switch (stuff)
                {
                    case "Title1":
                        parameter = new MyModel
                        {
                            Title = "Title1",
                            Subtitle = "My Subtitle 1",
                            Description = "My Description 1 goes here."
                        };
                        break;
                    case "Title2":
                        parameter = new MyModel
                        {
                            Title = "Title2",
                            Subtitle = "My Subtitle 2",
                            Description = "My Description 2 goes here."
                        };
                        break;
                    //Some other case      
                }
                NavigationService.Navigate(typeof(DetailPagePage), parameter);
            }
        }
        Window.Current.Activate();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...