使用时间轴跳到应用程序的详细信息页面

时间:2018-08-31 13:22:59

标签: c# uwp

在我的应用中,我有一个顶部菜单,一个“列表页面”和“详细页面”。列表页面上的信息作为参数传递到详细信息页面。

我试图通过在详细信息页面中创建ActivationUri,然后在OnActivated中的App.xaml.cs中创建关联代码,来使用时间轴跳回应用程序的详细信息页面。但是,当我单击时间轴中的项目时,该应用程序将导航到默认主页。我认为问题在于应用程序在使用时间轴时不会“记住”传递的参数。

如果有可能,对此的任何建议将不胜感激。谢谢。

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 :(得分:1)

首先,我澄清一下示例中的DetailPagePage与您上面的代码中的DetailPage相对应。

stuff变量(上述代码中的mylink)为null的原因是,您创建了一个新的DetailPagePage类对象,该对象与同一个DetailPagePage对象不同单击GridView项时导航至。当您创建新的DetailPagePage对象时,此新的DetailPagePage对象的pageid未分配值,因此为空。

您可以将pageid属性更改为DetailPagePage类的静态属性,然后可以在App.xaml.cs中访问相同的pageid

DetailPagePage中,您只需要将pageid更改为静态,

public static string pageid;

然后,在您的App.xaml.cs的OnActivated方法中,由于uriArgs.Uri.Host使Title小写,因此与页面ID进行比较时,您需要调用{{ 1}}方法。因此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的{​​{1}}方法,因为DetailPagePage无法转换为{{ 1}},您可能需要使用导航参数数据来创建具有相同信息的OnNavigatedTo对象以显示它们。

--- 更新 ---

  

您可能需要使用导航参数数据来创建具有相同信息的uriArgs对象,以显示它们。

这就是说,您可以创建一个新的MyModel对象,该对象的属性值与您在MyModel方法中单击的MyModel对象相同,然后将该对象传递给MyModel方法,因此MyModel方法将如下所示:

OnActivated