【发布时间】:2009-10-27 14:01:00
【问题描述】:
我在我的用户界面中使用 WPF 和 MVVM 模式。在我的 ViewModel 中,我有一个包含以毫米为单位的距离的列表,我通过将 ListView.ItemsSource 绑定到列表来显示在 ListView 中。但是,我希望显示的值使用更自然的单位 - 米或英尺,具体取决于“公制”复选框的状态。
我编写了几个简单的类,MillimetresToMetresConverter 和 MillimetresToFeetConverter,它们都实现了 IValueConverter。虽然我可以将我的数据绑定上的 Converter 属性设置为一个或另一个,但我不确定当复选框的状态发生变化时如何在这些转换器之间进行更改。
我的计划是在我的 ViewModel 上有一个字段“IValueConverter lengthConverter”,我可以将其设置为一个转换器或另一个,然后在我的 XAML 中执行 ...="{Binding Converter={Binding Path=lengthConverter}}" - 不幸的是,这不起作用,因为 Converter 不是依赖属性。
如何在运行时更改数据绑定使用的转换器?
【问题讨论】:
-
您应该能够使用 DependencyObject.GetBinding(DependencyProperty),例如myTextBlock.GetBinding(TextBlock.TextProperty) 获取(和修改)Binding 对象。
-
不幸的是,遵循 MVVM 模式意味着代码需要存在于 ViewModel 中——它没有对视图的引用,因此无法触及“myTextBlock”。
标签: wpf data-binding mvvm ivalueconverter