我在页面上有一个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
刚刚与之挂钩。
看到ViewState
的{{1}}属性是只读的,是否有某种方法可以在这些较小的屏幕上强制MasterDetailsView
打开而不是DetailsView
?如果没有,应该如何促进深层链接功能呢?
答案 0 :(得分:1)
通过我的测试,当尚未加载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;
}