c# - 使用 Timeline 跳转到应用详情页
问题描述
在我的应用程序中,我有一个顶部菜单、一个“列表页面”和“详细信息页面”。列表页面上的信息作为参数传递给详细信息页面。
我正在尝试使用时间轴跳回我的应用程序的详细信息页面,方法是在详细信息页面中创建一个 ActivationUri,然后在 OnActivated 中的 App.xaml.cs 中创建关联代码。但是,当我单击时间轴中的项目时,应用程序只会导航到默认主页。我认为问题在于当我使用时间轴时应用程序没有“记住”传递的参数。
对此的任何建议,如果可能的话,将不胜感激。谢谢。
应用程序.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;
}
解决方案
首先,我澄清DetailPagePage
您的示例中的 与DetailPage
您上面的代码中的相对应。
stuff
变量(mylink
在上面的代码中)为 null的原因是您创建了一个新的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
'sOnNavigatedTo
方法,因为uriArgs
无法转换为 a 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();
}
}
推荐阅读
- dbeaver - 如何将 DBeaver 连接到 CockroachDB Serverless?
- discord - 问。如何提及发件人和他们提及的人(discord py.)
- firebase - 如何删除无法删除的谷歌广告转化操作,因为它用于在广告系列级别进行优化
- python - 无需重新加载应用程序即可更改 Python Json 文件
- php - 为什么我的正则表达式在我的 php 代码中不起作用
- blazor - 有没有一种方法可以让递增计数器在索引页面上显示图像,即使是假的,另一个是假的。在身体是我的尝试
- javascript - 绘制后如何下载不同的html画布?
- filter - Mapbox 商店定位器不会加载自定义标记
- java - 如何使用串行接口在 Teensy4.1 和 RaspberryPi 4 之间交换数据
- javascript - 当从文档存储站点检索到的文档在另一个应用程序中打开时,Edge 中会留下空白窗口