6

我在我的用户界面中使用 WPF 和 MVVM 模式。在我的 ViewModel 中,我有一个包含以毫米为单位的距离的列表,我通过将 ListView.ItemsSource 绑定到列表来显示在 ListView 中。但是,我希望显示的值使用更自然的单位 - 米或英尺,具体取决于“公制”复选框的状态。

我编写了几个简单的类,MillimetresToMetresConverter 和 MillimetresToFeetConverter,它们都实现了 IValueConverter。虽然我可以将我的数据绑定上的 Converter 属性设置为一个或另一个,但我不确定当复选框的状态发生变化时如何在这些转换器之间进行更改。

我的计划是在我的 ViewModel 上有一个字段“IValueConverter lengthConverter”,我可以将其设置为一个转换器或另一个,然后在我的 XAML 中执行...="{Binding Converter={Binding Path=lengthConverter}}"- 不幸的是,这不起作用,因为 Converter 不是依赖属性。

如何在运行时更改数据绑定使用的转换器?

4

2 回答 2

5

Most of the time when using the MVVM methodology, you can do the formatting task in the VM classes. In your case, you could add a Format property to the VM class, and based on the value of the Format property, return a well formated string.

See this discussion for more information.

于 2009-10-27T14:50:05.137 回答
0

FormatMillimetresConverter如果我可以建议一个简单的替代解决方案:在您的 ViewModel 中创建一个小的,其UseMetric属性绑定到“metric”复选框。

于 2009-10-27T14:07:17.050 回答