#.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 основного окна]?