我在用户界面中使用WPF和MVVM模式。在我的ViewModel中,我有一个List,其中包含以毫米为单位的距离,我通过将ListView.ItemsSource绑定到List来显示在ListView中。但是,我希望显示的值使用更自然的单位 - 米或英尺,具体取决于“公制”复选框的状态。
我写了几个简单的类,MillimetresToMetresConverter和MillimetresToFeetConverter,它们都实现了IValueConverter。虽然我可以将数据绑定的Converter属性设置为一个或另一个,但我不确定当复选框的状态发生变化时如何在这些转换器之间进行更改。
我的计划是在我的ViewModel上有一个字段“IValueConverter lengthConverter”,我可以设置为一个转换器或另一个,然后在我的XAML中...="{Binding Converter={Binding Path=lengthConverter}}"
- 不幸的是,这不起作用,因为Converter不是依赖项属性。
如何在运行时更改数据绑定使用的转换器?
答案 0 :(得分:5)
大多数情况下,使用MVVM方法时,您可以在VM类中执行格式化任务。在您的情况下,您可以向VM类添加Format属性,并根据Format属性的值返回格式良好的字符串。
有关详细信息,请参阅this discussion。
答案 1 :(得分:0)
如果我可以建议一个简单的替代解决方案:在ViewModel中创建一个小FormatMillimetresConverter
,其UseMetric
属性绑定到“metric”复选框。