Когда я должен использовать UserControl вместо Страницы?

Я замечаю, что многие платформы WPF MVVM, кажется, избегают использования NavigationWindow, и средства управления Page в пользу создания страниц с помощью вложили UserControls.

NavigationWindow и Page обеспечивают простые способы включить назад и передать навигацию в журнале, а также обеспечение простого способа передать данные среди страниц. Большинство платформ MVVM, которые я видел, повторно реализует эти функции различными способами.

Существует ли определенная причина избегать использования NavigationWindow и Page?

8
задан dthrasher 12 April 2010 в 13:30
поделиться

4 ответа

"NavigationWindow не сохраняет экземпляр объекта содержимого в истории навигации. Вместо этого NavigationWindow создает новый экземпляр объекта содержимого каждый раз время перехода к нему с помощью истории навигации . Такое поведение предназначено для предотвращения чрезмерного потребления памяти , когда большие числа и большие фрагменты содержания выполняется переход к. Следовательно, состояние содержания не запоминается от одной навигации к другой. Однако WPF предоставляет несколько методов на , в котором вы можете сохранить часть состояния для части контента в истории навигации .... "

http://msdn.microsoft.com/ en-us / library / system.windows.navigation.navigationwindow.aspx

10
ответ дан 5 December 2019 в 10:40
поделиться

Что ж, вы по-прежнему собираетесь использовать пользовательские элементы управления для создания многократно используемых субкомпонентов, но что касается архитектуры приложения, на самом деле все сводится к варианту использования. Если вы создаете типичное веб-приложение, подойдет приложение Business / Navigation. Если вы пишете игру, не так много. Точно так же, если вы делаете что-то вроде интерактивной рекламы или медиаплеера.

1
ответ дан 5 December 2019 в 10:40
поделиться

Я только что нашел другую интересную информацию, относящуюся к WPF NavigationWindow и Page на веб-сайте Пола Стовелла.

Он сказал следующее о классе NavigationWindow:

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

См. Его подробную статью о WPF Navigation и Magellan и проблемах управления страницами WPF , с которыми он столкнулся при написании своей платформы Magellan WPF.

2
ответ дан 5 December 2019 в 10:40
поделиться

Я только что обнаружил еще одно различие между UserControls и Pages: страницы нельзя использовать как DataTemplates.

Например, если вы создавали приложение с использованием стиля MVVM, вы могли ожидать, что это сработает:

    <DataTemplate DataType="{x:Type ViewModels:ProjectDashboardViewModel}">
        <Views:ProjectDashboardView />
    </DataTemplate>

Но если ProjectDashboardView является страницей, это не удастся.

3
ответ дан 5 December 2019 в 10:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: