在我的应用中,我有一个顶部菜单,一个“列表页面”和“详细页面”。列表页面上的信息作为参数传递到详细信息页面。
我试图通过在详细信息页面中创建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;
}
答案 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