2010-04-12 17 views
8

Observé que muchos de los marcos MVVM de WPF parecen evitar el uso de los controles NavigationWindow y Page a favor de la composición de páginas usando UserControls anidados.¿Cuándo debo usar un UserControl en lugar de una página?

NavigationWindow y Page proporcionan formas sencillas de habilitar la navegación hacia atrás y hacia delante en el diario, así como proporcionar una manera fácil de pasar datos entre las páginas. La mayoría de los marcos de MVVM que he visto vuelven a implementar estas características de varias maneras.

¿Existe alguna razón específica para evitar el uso de NavigationWindow y Page?

Respuesta

10

"NavigationWindow no almacena una instancia de un objeto contenido en historial de navegación. En su lugar, NavigationWindow crea un nuevo instancia del objeto de contenido cada tiempo que se navega a mediante el uso de historial de navegación. Este comportamiento está diseñado para evitar el consumo excesivo de memoria cuando un gran número y grandes piezas de contenido están siendo navegar a. en consecuencia, el estado del contenido no se recordaba de una navegación hacia la siguiente. ¿Cómo nunca, WPF proporciona varias técnicas por que puede almacenar un pedazo de estado de una parte del contenido de la historia de la navegación ...."

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

+2

Buena captura.Entonces, tal vez las clases NavigationWindow y Page son un poco menos relevantes para una típica aplicación de línea de negocio. Aunque todavía me sorprende que tantos frameworks MVVM los eviten por completo. – dthrasher

1

Bueno, todavía vas a utilizar controles de usuario para crear subcomponentes reutilizables, pero en cuanto a la arquitectura de la aplicación, se trata realmente de casos prácticos. Si está creando una aplicación web típica, una aplicación de negocios/navegación debería estar bien. Si estás escribiendo un juego, no tanto. Del mismo modo, si está haciendo algo como un anuncio interactivo o un reproductor multimedia.

2

me acaba de encontrar otras informaciones de interés relacionado con WPF NavigationWindow y la página en el sitio web de Paul Stovell.

Él tiene esto que decir acerca de la clase NavigationWindow:

WPF incluye una clase llamada NavigationWindow, que es esencialmente una ventana que también funciona como un marco, mediante la implementación de la mayor parte de las mismas interfaces. Suena útil al principio, pero la mayoría de las veces necesita más control sobre la ventana, por lo que nunca tuve la necesidad de utilizar esta clase. Solo lo señalo para completar, aunque su millaje puede variar.

Ver su artículo en profundidad sobre WPF Navigation y la Magellan and WPF Page management issues se encontró al escribir su marco Magellan WPF.

3

Acabo de descubrir otra diferencia entre UserControls y Pages: Las páginas no pueden utilizarse como DataTemplates.

Por ejemplo, si estuviera creando aplicación utilizando el estilo MVVM, se podría esperar que esto funcione:

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

Pero si el ProjectDashboardView es una página, se producirá un error.

+0

En este escenario, desearía que su página aceptara un modelo de vista en el constructor o lo creara a partir de otros datos. En general, las implementaciones MVVM querrían utilizar una función de página . Dentro de su página, puede tener un presentador de contenido que contenga el modelo de vista. La página es un componente de nivel superior. Trata de pensarlo como una ventana en línea. – Gusdor

Cuestiones relacionadas