Używam WPF i wzorzec MVVM w moim interfejsie użytkownika. W moim ViewModelu mam listę zawierającą odległości w milimetrach, które wyświetlam w ListView, wiążąc ListView.ItemsSource z Listą. Jednak chciałbym, aby wyświetlane wartości korzystały z bardziej naturalnej jednostki - albo metrów albo stóp, w zależności od stanu pola wyboru "metryczne".WPF i MVVM: Zmiana konwertera powiązania danych w czasie wykonywania
Napisałem kilka prostych klas, MillimetresToMetresConverter i MillimetresToFeetConverter, które implementują IValueConverter. Chociaż mogę ustawić właściwość Konwerter na moim powiązaniu danych z jednym lub drugim, nie jestem pewien, jak zmienić te konwertery, gdy zmienia się stan pola wyboru.
Moim planem było posiadanie pola "IValueConverter lengthConverter" na moim ViewModelu, który mógłbym ustawić na jeden konwerter lub inny, a następnie w moim XAML-ie ...="{Binding Converter={Binding Path=lengthConverter}}"
- niestety to nie działa, ponieważ Konwerter nie jest własnością zależności.
Jak zmienić konwerter używany przez wiązanie danych w czasie wykonywania?
Powinieneś być w stanie użyć DependencyObject.GetBinding (DependencyProperty), np. myTextBlock.GetBinding (TextBlock.TextProperty), aby uzyskać (i zmodyfikować) obiekt wiązania. – Heinzi
Niestety, po wzorzec MVVM oznacza, że kod musiałby żyć w ViewModel - który nie ma odniesienia do widoku, a zatem nie może dotknąć "myTextBlock". – user200783