如何在小屏幕设备上深入 link MasterDetailsView 中的项目?
How can you deep-link into an item in a MasterDetailsView on devices with small screens?
我从另一个页面导航到的页面上有一个 MasterDetailsView
。我传入一个参数,该参数对应于列表中的一个项目 MasterDetailsView
绑定到 ItemSource
,如下所示:
protected override void OnNavigatedTo(NavigationEventArgs e) {
if (e.Parameter != null) {
Thing selectedThing = e.Parameter as Thing;
Selected = selectedThing;
MasterDetailsViewControl.SelectedItem = selectedThing;
}
}
这在具有大屏幕的外形规格上运行良好 - DetailsView
成功填充了相关内容。然而,在较小的屏幕上,DetailsView
被隐藏以支持 ListView
全屏显示。这通常是有利的,但在这里我想打开 DetailsView
,因为个人 Thing
刚刚被深度链接到。
鉴于 MasterDetailsView
的 ViewState
属性 是只读的,有没有办法强制打开 DetailsView
而不是 ListView
在这些较小的屏幕上?如果不是,应该如何促进深度链接功能?
根据我的测试,当 MasterDetailsView
控件尚未加载时,如果您设置 SelectedItem
属性,它不会触发 OnSelectedItemChanged 处理程序。这就是 DetailsView
打不开的原因。
要解决您的问题,您可以在 MasterDetailsViewControl 的 Loaded 事件处理程序中设置 SelectedItem
。
private Thing Selected;
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (e.Parameter != null)
{
Thing selectedThing = e.Parameter as Thing;
Selected = selectedThing;
}
}
private void MasterDetailsViewControl_Loaded(object sender, RoutedEventArgs e)
{
MasterDetailsViewControl.SelectedItem = Selected;
}
我从另一个页面导航到的页面上有一个 MasterDetailsView
。我传入一个参数,该参数对应于列表中的一个项目 MasterDetailsView
绑定到 ItemSource
,如下所示:
protected override void OnNavigatedTo(NavigationEventArgs e) {
if (e.Parameter != null) {
Thing selectedThing = e.Parameter as Thing;
Selected = selectedThing;
MasterDetailsViewControl.SelectedItem = selectedThing;
}
}
这在具有大屏幕的外形规格上运行良好 - DetailsView
成功填充了相关内容。然而,在较小的屏幕上,DetailsView
被隐藏以支持 ListView
全屏显示。这通常是有利的,但在这里我想打开 DetailsView
,因为个人 Thing
刚刚被深度链接到。
鉴于 MasterDetailsView
的 ViewState
属性 是只读的,有没有办法强制打开 DetailsView
而不是 ListView
在这些较小的屏幕上?如果不是,应该如何促进深度链接功能?
根据我的测试,当 MasterDetailsView
控件尚未加载时,如果您设置 SelectedItem
属性,它不会触发 OnSelectedItemChanged 处理程序。这就是 DetailsView
打不开的原因。
要解决您的问题,您可以在 MasterDetailsViewControl 的 Loaded 事件处理程序中设置 SelectedItem
。
private Thing Selected;
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (e.Parameter != null)
{
Thing selectedThing = e.Parameter as Thing;
Selected = selectedThing;
}
}
private void MasterDetailsViewControl_Loaded(object sender, RoutedEventArgs e)
{
MasterDetailsViewControl.SelectedItem = Selected;
}