1

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刚刚被深深地联系在一起。

看到 a 的ViewState属性MasterDetailsView是只读的,有没有办法在这些较小DetailsView的屏幕上强制打开而不是打开?ListView如果不是,应该如何促进这种深度链接功能?

4

1 回答 1

1

通过我的测试,当MasterDetailsView控件尚未加载时,如果设置SelectedItem属性,它将不会触发OnSelectedItemChanged处理程序。这就是为什么DetailsView不会打开的原因。

要解决您的问题,您可以SelectedItem在 MasterDetailsViewControl 的 Loaded 事件处理程序中设置。

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;
}
于 2018-03-19T06:51:22.520 回答