WPF-фрейм обращается к элементам управления родительской страницы - PullRequest
1 голос
/ 18 апреля 2009

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

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

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

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

Есть идеи?

1 Ответ

3 голосов
/ 19 апреля 2009

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

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

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

...