Я замечаю, что многие платформы WPF MVVM, кажется, избегают использования NavigationWindow, и средства управления Page в пользу создания страниц с помощью вложили UserControls.
NavigationWindow и Page обеспечивают простые способы включить назад и передать навигацию в журнале, а также обеспечение простого способа передать данные среди страниц. Большинство платформ MVVM, которые я видел, повторно реализует эти функции различными способами.
Существует ли определенная причина избегать использования NavigationWindow и Page?
"NavigationWindow не сохраняет экземпляр объекта содержимого в истории навигации. Вместо этого NavigationWindow создает новый экземпляр объекта содержимого каждый раз время перехода к нему с помощью истории навигации . Такое поведение предназначено для предотвращения чрезмерного потребления памяти , когда большие числа и большие фрагменты содержания выполняется переход к. Следовательно, состояние содержания не запоминается от одной навигации к другой. Однако WPF предоставляет несколько методов на , в котором вы можете сохранить часть состояния для части контента в истории навигации .... "
http://msdn.microsoft.com/ en-us / library / system.windows.navigation.navigationwindow.aspx
Что ж, вы по-прежнему собираетесь использовать пользовательские элементы управления для создания многократно используемых субкомпонентов, но что касается архитектуры приложения, на самом деле все сводится к варианту использования. Если вы создаете типичное веб-приложение, подойдет приложение Business / Navigation. Если вы пишете игру, не так много. Точно так же, если вы делаете что-то вроде интерактивной рекламы или медиаплеера.
Я только что нашел другую интересную информацию, относящуюся к WPF NavigationWindow и Page на веб-сайте Пола Стовелла.
Он сказал следующее о классе NavigationWindow:
WPF включает в себя класс NavigationWindow, который по сути является Window, который также является фреймом, реализуя большинство тех же интерфейсов. Сначала это звучит полезно, но в большинстве случаев вам нужно больше контроля над Window, поэтому мне никогда не приходилось использовать этот класс. Я просто указываю на это для полноты картины, хотя ваш опыт может отличаться.
См. Его подробную статью о WPF Navigation и Magellan и проблемах управления страницами WPF , с которыми он столкнулся при написании своей платформы Magellan WPF.
Я только что обнаружил еще одно различие между UserControls и Pages: страницы нельзя использовать как DataTemplates.
Например, если вы создавали приложение с использованием стиля MVVM, вы могли ожидать, что это сработает:
<DataTemplate DataType="{x:Type ViewModels:ProjectDashboardViewModel}">
<Views:ProjectDashboardView />
</DataTemplate>
Но если ProjectDashboardView является страницей, это не удастся.