2010-01-26 10 views
12

He estado usando MVVM durante los últimos dos años y ciertamente ha evolucionado para mejor desde ese momento. Mientras leía los cientos de artículos de MVVM y las preguntas de stackoverflow, me di cuenta de que cada vez hay más artículos que describen la relación y la creación de viewmodel/view como ViewModel primero o View first. Estos artículos generalmente usan IoC o DI. Incluiría algunos enlaces, pero como nuevo usuario de SO solo estoy limitado a 1.WPF - MVVM - ¿Cuáles son los pros y los contras de las diversas técnicas de creación de vistas?

Mi técnica favorita ha sido el uso de plantillas de datos para crear las vistas y estructurar la aplicación fuera de los modelos de vista en lugar de las vistas . Raramente veo artículos que usen este patrón.

<DataTemplate DataType="{x:Type ViewModels:DummyViewModel}"> 
    <Views:DummyUserControl DataContext="{Binding}"/> 
</DataTemplate> 

Comprobabilidad y desacoplamiento parecen ser el foco principal de estos diseños de la relación 'no DataTemplate' de creación de V-VM/y artículos, y muchas veces tienen que ver con el MEF o prisma. En última instancia, me gustaría saber lo siguiente:

  1. ¿Todavía se usa o se recomienda la técnica de creación de vistas de DataTemplate?
  2. ¿Cuáles son los pros/contras de la vista del primer diseño?
  3. Cuáles son las ventajas/desventajas de la primera modelo de vista de diseño (con la vista inyectados)

que se dan cuenta de estas son preguntas que merecen respuestas sueltos sueltos.

Se agradece cualquier buen enlace a los artículos que cubren estos temas, siempre que no estén relacionados con MEF/PRISM. Mientras más, mejor. (Google aparece bastante)

Respuesta

2

1.¿Sigue utilizando o recomendando la técnica de creación de vistas de DataTemplate?

Este es mi método preferido para operar en MVVM. Me gusta mucho este enfoque, por razones que especificaré a continuación. Yo uso esto en todo mi desarrollo.

2.¿Cuáles son los pros/contras del primer diseño de la vista?

El pro principal que encontré aquí es que es un poco más fácil en la experiencia del tiempo de diseño. El diseñador "conoce" el contexto de datos de antemano, y tiende a ser capaz de hacer un trabajo más fácil de trabajar.

El principal problema aquí, desde mi punto de vista, es que está agregando un acoplamiento más ajustado entre la Vista y el Modelo de Vista. También es más difícil elegir un modelo específico para transmitir.

3.What son los pros/contras de la primera diseño modelo de vista (con la vista inyectado)

personalmente me gusta este enfoque. De esta manera, el lado "lógico" de su aplicación está completamente contenido dentro de su capa de ViewModel. Al usar ContentPresenters, puede hacer que ViewModel genere fácilmente otros ViewModels, definiendo el "flujo" de su aplicación. Las vistas pueden ser cambiadas por un diseñador muy fácilmente.

Sin embargo, el inconveniente es una ligera disminución en la usabilidad del tiempo de diseño, ya que las vistas realmente no saben nada sobre la VM en tiempo de diseño, se pierde cierta designabilidad.

+0

bien que los clavos mis propias experiencias y opiniones 100%. Con todo lo que se ha escrito últimamente sobre el uso de contenedores para generar las vistas y los modelos de vista, me preocupaba que me estaba "perdiendo el barco". ¿Inyecta su vista en su modelo de vista usando una interfaz? Personalmente, no quiero que mis viewmodels tengan ninguna referencia a la vista. – user259509

+0

No mencioné MEF, pero en realidad lo uso también. Es muy útil para manejar casos extremos en lo que antecede (es decir, servicios), así como también para hacer las plantillas de datos. Puede usar MEF para configurar sus DataTemplates desde su Vista, sin tener que "contaminar" su app.xaml, por ejemplo ... –

+0

Su blog (http://reedcopsey.com/) es impresionante, por cierto – user259509

0

Experimentamos que el enfoque de DataTemplate tiene algunas limitaciones. Por ejemplo, la plantilla se crea una instancia como instancia compartida (singleton). En algunos escenarios, esto tiene efectos secundarios indeseables.Esa es la razón por la que utilizamos el primer diseño de ViewModel (con la vista inyectada).

El enfoque que utilizamos se describe en el marco WPF Aplicación (WAF) página proyecto:

http://waf.codeplex.com/wikipage?title=Model-View-ViewModel%20Pattern&ProjectName=waf

Cuestiones relacionadas