2009-04-18 1 views
1

У меня есть страница WPF, которая содержит список и фрейм. В кадре загружаются различные страницы, определенные выбором в списке.WPF Frame, доступ к элементам управления родительскими страницами

Каждая страница в кадре имеет различные поля ввода и имеет кнопку «Сохранить отмену». Когда нажата кнопка «Сохранить», мне нужно сохранить содержимое в базе данных, а Listbox на родительской странице обновиться, чтобы отразить новые данные.

Сохранение данных очень просто, но как я могу инициировать обновление содержимого списка на родительской странице при вызове его со страницы, находящейся внутри фрейма?

Мне нужно как-то получить доступ к элементам управления родительскими страницами, чтобы сделать это.

Любые идеи?

ответ

3

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

При использовании кнопки «Сохранить» в некоторых моделях очистки страниц ваши классы страниц вызовут событие. Тогда ваш родительский фрейм может потопить событие и обновить все, что он знает, нужно обновить после операции сохранения. Это проще в обслуживании, потому что ваши компоненты более слабо связаны, но все еще добавляет много знаний о базе данных в ваши компоненты GUI. Такая конструкция может быть подходящей для относительно простого приложения, в котором вы не ожидаете много обслуживания или будущих улучшений.

Дизайн шаблона, который я предпочитаю (как и многие разработчики), заключается в том, чтобы изолировать обработку базы данных и бизнес-логику внутри одного или нескольких классов с помощью простого программного интерфейса, который можно легко протестировать. Компоненты GUI сохраняются максимально простыми и тонкими, поэтому их можно легко изменить при необходимости. Это часто называют шаблоном Model-View-Controller, но для него есть другие имена. В вашем примере класс «controller», который инкапсулирует вашу бизнес-логику, будет иметь свойства и методы для чтения и настройки информации, а также метод «Сохранить» или «Commit», который записывает изменения в базу данных. Как только сохранение будет завершено, оно поднимет событие «Сохранено» или «Изменено», которое уведомляет все элементы управления («представления»), отображающие информацию о том, что информация изменилась, и они будут обновляться на основе новых значений свойств вашего класса контроллера ,

+0

Спасибо, Джей, это интересный подход. Я использую бизнес-объекты с уровнем доступа к данным, поэтому, возможно, я могу инициировать обновление оттуда. Я надеялся, что WPF предложит простой способ доступа к родительским элементам управления, но, возможно, я слишком оптимистичен! – Mitch

Смежные вопросы