Как сделать глубокую ссылку на элемент в MasterDetailsView на устройствах с маленькими экранами?

У меня есть 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 объекта MasterDetailsView доступно только для чтения, есть ли способ принудительно открыть DetailsView, а не ListView на этих небольших экранах? Если нет, то как можно упростить эту функциональность глубоких ссылок?


person Curtis Parfitt-Ford    schedule 18.03.2018    source источник
comment
Это должен быть поддерживаемый вариант использования. Можете ли вы отправить сообщение о проблеме в репозиторий github с воспроизводимым образцом?   -  person Shawn Kendrot    schedule 19.03.2018


Ответы (1)


В моем тестировании, когда элемент управления MasterDetailsView не загружен, если вы установите свойство SelectedItem, он не будет запускать OnSelectedItemChanged. Вот почему DetailsView не открывается.

Чтобы решить ваш вопрос, вы можете установить SelectedItem в обработчике событий Loaded MasterDetailsViewControl.

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;
}
person Xie Steven    schedule 19.03.2018