WPF: состав пользовательского интерфейса - PullRequest
1 голос
/ 11 сентября 2009

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

Макет выглядит примерно так

<Grid>
   <List of Objects View/>
   <Objects Relationship View/>
   <Object Details View />
   <Multiple Objects Details View/>
   <View 5 />
   <View 6 />
     :
     :
</Grid>

Каждое представление создается (скрытая видимость) и привязывается к некоторым сложным данным при построении окна.Я хочу, чтобы только один вид был виден пользователю одновременно.Я делаю это, манипулируя видимостью.

Но проблема в том, что переход между представлениями не включает в себя просто переключение видимости.Он включает в себя повторное связывание с currentdata, остановку фоновых потоков / таймеров и запуск новых (и, возможно, повторное связывание), которые поддерживают вновь выбранное представление.Итак, что происходит с каждым новым представлением, которое я добавляю, я добавляю целый набор кода, чтобы позаботиться о всех возможных переходах.

Есть ли какой-то шаблон, который я могу использовать для такого сценария?

Также есть ли способ избежать создания и сокрытия всего при загрузке приложения и использования visibilty в качестве контроллера?

Любая помощь с благодарностью.Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 сентября 2009

Могу ли я спросить, как вы разрешаете пользователю переключаться между представлениями? Это ключевая комбинация? Mouseclick

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

Если вы используете TabControl, это открывает возможность использования события SelectionChanged, выходящего из TabControl, чтобы вы могли сказать фоновым потокам остановиться и вы можете выгрузить все, что вам нужно выгрузить.

В зависимости от того, как вы используете TabControl, пользовательский интерфейс может быть несколько виртуализирован. Это означает, что всякий раз, когда вкладка отменяется, весь пользовательский интерфейс для этой вкладки уничтожается и воссоздается при следующем выборе. Это будет вести себя так, если вы используете шаблон MVVM или PresentationModel и загружаете ViewModels в качестве элементов для вашего TabControl и используете DataTemplates для представлений. Если вы просто поместите TabItems в TabControl с элементами управления внутри них, он не будет вести себя таким образом.

Что касается шаблонов, я определенно рекомендую MVVM . Может потребоваться некоторое время, чтобы догнать и понять это, но я бы никогда не сделал WPF без него. Если вам нужны дополнительные ресурсы или примеры, дайте мне знать.

редактирование:

Я перечитал ваш вопрос и заметил, что вам может понадобиться другой тип навигации. Если у вас есть представления, для которых требуется переход к другим представлениям на основе действий пользователя, и вы не хотите, чтобы все представления были представлены пользователю, чтобы они могли выбрать, какое из них они хотят просмотреть (например, TabControl сделает), вы можете посмотреть на WPF Navigation . Навигация - это то, что MS добавила в WPF, чтобы обеспечить навигацию в стиле браузера в приложении WPF. Эта статья MSDN должна быть хорошим источником информации о подобных вещах.

1 голос
/ 11 сентября 2009

Это звучит как проблема, хорошо подходящая для Composite WPF (Prism). Вы можете определить свою основную область как регион и использовать SingleActiveRegion для отображения одного вида за раз Если вы создаете свой собственный адаптер региона, вы можете выполнять все обслуживание при изменении активного представления.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...