2010-07-18 11 views
6

Tengo un cuadro combinado vinculado a una colección, por lo que el usuario puede seleccionar uno de los elementos. Hasta aquí todo bien.¿Puedo tener un ValueConverter en mi ViewModel?

El contenido del cuadro combinado está controlado por el elemento, pero también por un valor en mi modelo de vista. Imagine que el valor en mi viewmodel es el idioma, tengo un diccionario de descripciones por idioma en mi artículo encuadernado y quiero mostrar el correcto.

¿Cómo debo hacer esto?

Respuesta

1

Haz una colección observable en tu viewmodel de tipo Item. Une la fuente de objetos de tu modelo de vista a esta colección observable.

public class Item 
{ 
public String description {get;set;} 
public String language {get;set;} 
public override ToString() 
{ 
     return description; 
} 
} 

El artículo seleccionado también estaría asociado a una propiedad de tipo Artículo también.

La anulación de ToString muestra la descripción.

La propiedad del elemento seleccionado tendrá una referencia a la propiedad del objeto seleccionado donde puede obtener el idioma.

2

Este es un ejemplo clásico de por qué existe ViewModel; desea tener una lógica que dependa del estado trivial de en la vista, así como del modelo principal.

Imagine que está escribiendo una prueba de unidad para ejecutar este comportamiento ante el ViewModel. Necesitará ViewModel para tener una propiedad asignada al elemento seleccionado. El ViewModel también tendría otra propiedad que varía según este elemento seleccionado, así como el otro valor de en el modelo de vista que mencionó.

Creo que este es el enfoque basado en pruebas para el diseño ViewModel - si no puede escribir una prueba unitaria para evaluarlo, entonces no tiene la combinación de interfaces estatales y publicadas correctas.

Por lo tanto, sí, ViewModel puede resolver el problema y si empuja todo el estado hacia abajo, puede hacer la unificación dentro del ViewModel.

+0

Andy, esta es la solución con la que me sentiría más cómodo, pero no puedo encontrar la mejor manera de hacerlo. ¿Tendría que implementar un tipo personalizado para que el cuadro combinado se vincule, y cuando me notifiquen un cambio, debería volver a enviar el valor al modelo? –

+0

¿Desea que el conjunto completo de descripciones para el combo cambie según este otro valor? –

+0

Lo siento Andy, extrañé tu comentario. Sí, necesito cambiar todo el conjunto de descripciones. Puedo pensar en algunas formas de hacerlo, ninguna de ellas particularmente buena :) –

Cuestiones relacionadas