2012-05-31 9 views
5

Estoy usando datatemplate para cargar mis vistas usando el descubrimiento PRISM 4. Tengo la necesidad de crear la vista/modelo de vista varias veces en lugar de reutilizar las instancias existentes, por lo que establezco x: Shared = false en el recurso, pero solo tiene impacto en el modelo de vista. Puedo confirmar que el modelo de vista no se reutiliza, pero la vista sí. El constructor de vista solo se llama una vez la primera vez que se llama. He leído publicaciones similares aquí, pero sus soluciones no funcionaron para mí. Quiero saber si puedo ampliar el cargador/localizador de recursos y asegurarme de que respeta el indicador Compartido.DataTemplate x: Shared = false no tiene ningún impacto en la vista

Así es como se define mi plantilla:

<DataTemplate DataType="{x:Type CVM:MyViewModel}" x:Shared="False"> 
     <V:MyView /> 
</DataTemplate> 
+0

¿Alguna solución sin tener que cambiar el diseño? – DotnetEng

+0

No sé, no he usado prisma y realmente no puedo pensar en nada elegante. –

+0

En Prism usted controla si quiere singleton o no a través del atributo 'PartCreationPolicy'. 'Shared' = singleton,' NonShared' = una nueva instancia. ¿Ha decorado su vista con '[PartCreationPolicy (CreationPolicy.NonShared)]'? –

Respuesta

0

Todo el DataTemplate contiene es una 'Template' para crear el árbol necesaria visual para cuando el objeto (en su caso, el modelo de vista) está a la vista.

Por lo tanto, si solo uno de ustedes 'MyViewModel' objetos está a la vista, entonces el contructor para su vista solo se llamará una vez (incluso si se crean instancias de varios Viewmodels). Si tenía varios de sus viewmodels a la vista, el constructor de su vista se llamará varias veces a medida que la plantilla de su DataTemplate se construye correctamente y se agrega al árbol visual (una para cada modelo de vista).

Sin embargo, si su ItemsControl (que contiene sus modelos de vista) tiene la virtualización activada, entonces solo puede existir un 'contenedor' (que en términos simplificados será su plantilla de datos) y puede volver a utilizarse.

Cuestiones relacionadas