Estoy usando WPF y el patrón MVVM en mi interfaz de usuario. En mi ViewModel tengo una lista que contiene distancias en milímetros, que se muestran en un ListView vinculando ListView.ItemsSource a la lista. Sin embargo, me gustaría que los valores mostrados utilicen una unidad más natural, ya sea metros o pies, dependiendo del estado de una casilla de verificación "métrica".WPF y MVVM: cambio del convertidor de enlace de datos en tiempo de ejecución
He escrito un par de clases simples, MillimetresToMetresConverter y MillimetresToFeetConverter, las cuales implementan IValueConverter. Aunque puedo establecer la propiedad Convertidor en mi enlace de datos a uno u otro, no estoy seguro de cómo cambiar entre estos convertidores cuando cambia el estado de la casilla de verificación.
Mi plan era tener un campo "IValueConverter lengthConverter" en mi modelo de vista que podría fijar a un convertidor o el otro, entonces en mi XAML hacer ...="{Binding Converter={Binding Path=lengthConverter}}"
- lamentablemente esto no funciona ya Converter no es una propiedad de dependencia.
¿Cómo se puede cambiar el convertidor utilizado por el enlace de datos en el tiempo de ejecución?
Debería poder usar DependencyObject.GetBinding (DependencyProperty), p. Ej. myTextBlock.GetBinding (TextBlock.TextProperty) para obtener (y modificar) el objeto de enlace. – Heinzi
Desafortunadamente, siguiendo el patrón MVVM significa que el código tendría que vivir en el modelo de vista - que no tiene ninguna referencia a la vista y por lo tanto no se puede tocar "myTextBlock". – user200783