Я использую WPF и шаблон MVVM в моем пользовательском интерфейсе. В моей модели ViewModel у меня есть список, содержащий расстояния в миллиметрах, которые я показываю в ListView, привязывая ListView.ItemsSource к списку. Тем не менее, я хотел бы, чтобы отображаемые значения использовали более естественную единицу - метры или футы в зависимости от состояния «метрики».WPF и MVVM: изменение конвертера привязки данных во время выполнения
Я написал несколько простых классов, MillimetresToMetresConverter и MillimetresToFeetConverter, оба из которых реализуют IValueConverter. Хотя я могу установить свойство Converter при привязке данных к одному или другому, я не уверен, как изменить эти конвертеры при изменении состояния флажка.
Мой план состоял в том, чтобы на моем ViewModel поле «IValueConverter lengthConverter», которое я мог установить на один конвертер или другой, а затем в моем XAML do ...="{Binding Converter={Binding Path=lengthConverter}}"
- к сожалению, это не работает, поскольку конвертер не является свойством зависимостей.
Как изменить конвертер, используемый привязкой данных во время выполнения?
Вы должны иметь возможность использовать DependencyObject.GetBinding (DependencyProperty), например. myTextBlock.GetBinding (TextBlock.TextProperty), чтобы получить (и изменить) объект привязки. – Heinzi
К сожалению, следующий за шаблоном MVVM означает, что код должен будет жить в ViewModel, который не имеет ссылки на представление и, таким образом, не может касаться «myTextBlock». – user200783