WPF и MVVM: изменение конвертера привязки данных во время выполнения - PullRequest
6 голосов
/ 27 октября 2009

Я использую WPF и шаблон MVVM в своем пользовательском интерфейсе. В моей ViewModel у меня есть список, содержащий расстояния в миллиметрах, которые я отображаю в ListView, привязывая ListView.ItemsSource к списку. Однако мне бы хотелось, чтобы отображаемые значения использовали более естественную единицу измерения - метры или футы в зависимости от состояния флажка «метрика».

Я написал пару простых классов, MillimetresToMetresConverter и MillimetresToFeetConverter, которые реализуют IValueConverter. Хотя я могу установить свойство Converter для моей привязки данных к одному или другому, я не уверен, как переключаться между этими конвертерами при изменении состояния флажка.

Мой план состоял в том, чтобы в моем ViewModel было поле "IValueConverter lengthConverter", которое я мог бы установить для одного преобразователя или другого, тогда в моем XAML сделайте ...="{Binding Converter={Binding Path=lengthConverter}}" - к сожалению, это не работает, поскольку Converter не является свойством зависимости.

Как изменить преобразователь, используемый привязкой данных во время выполнения?

Ответы [ 2 ]

5 голосов
/ 27 октября 2009

Большую часть времени при использовании методологии MVVM вы можете выполнить задачу форматирования в классах VM. В вашем случае вы можете добавить свойство Format в класс VM и на основе значения свойства Format вернуть хорошо отформатированную строку.

См. это обсуждение для получения дополнительной информации.

0 голосов
/ 27 октября 2009

Если я могу предложить простое альтернативное решение: создайте небольшой FormatMillimetresConverter в вашей ViewModel, чье свойство UseMetric связано с флажком "метрика".

...