Как мне отправлять сообщения на страницу в рамках фреймового элемента управления?

#.net #wpf

#.net #wpf

Вопрос:

У меня есть окно с основным столбцом навигации (ListBox) и подробным представлением для текущего выбранного элемента. Когда я выбираю элемент в списке, в подробном представлении отображается набор элементов управления (редактируемые текстовые поля и т. Д.), Которые имеют отношение к выбранному элементу.

До сих пор я решил использовать фрейм, который может отображать разные страницы, изменяя фрейм.Источник. Кроме того, я хотел бы, чтобы страница загружала информацию из выбранного элемента списка при первом нажатии и сохраняла ту же информацию, отображаемую в подробном представлении, обратно в тот же элемент, когда выбранный элемент списка изменяется.

Поскольку страницы и главное окно находятся в разных файлах XAML, они по своей сути не могут видеть друг друга. Как мне передать такое сообщение? Я думаю о чем-то концептуально похожем на вызов JSON, где вы можете передать ряд параметров на другую страницу и получить ответ.

Благодаря приведенному ниже ответу я нашел это руководство о NavigationServices. Этот пример кода был особенно актуален:

 Customer selectedCustomer = (Customer)listBox.SelectedItem;
this.NavigationService.Navigate(new CustomerDetailsPage(selectedCustomer));
  

Что мне нужно было сделать, так это вызвать конструктор новой страницы с объектом, который я хотел передать в качестве аргумента. Поскольку объект передается по ссылке, изменения, внесенные в этот объект, будут автоматически отражены в других областях приложения, где присутствует объект.

Ответ №1:

Я думаю, что если Page1 фрейм hosts говорит MyFrame , что переходит к Page2 then в NavigationService.Navigated событии из фрейма….

      MyFrame.NavigationService.Navigated  =
         (sender, e) =>
            {
                  var nextPageContent = MyFrame.NavigationService.Content;
                  //// this is the root of the content of Page2.
            }
  

nextPageContent может предоставлять свои собственные DataContext и т. Д…

Комментарии:

1. Хорошо, я могу сделать что-то вроде nextPageContent . DataContext = [DataContext основного окна]?