如何在小屏幕设备上深入 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 刚刚被深度链接到。

鉴于 MasterDetailsViewViewState 属性 是只读的,有没有办法强制打开 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;
}