我需要将一个两部分的值转换为一个字符串,然后再转换回来,例如:
{Value = 12.0, Units = DimensionUnits.Inches}
转换为
"12 in"
使用多值转换器从源转换非常简单,但如果用户未在字符串中提供单位类型,则无法转换回来,因此多值转换器看起来不像我需要的解决方案。
直接转换器参数不起作用,因为需要绑定单元类型,所以我研究了如何创建可绑定参数。创建一个可绑定的参数实际上很容易——从 DependencyObject 派生——但是你的转换器没有存在于可视化树中的问题——因此无法绑定到任何东西——有两种解决方案:
http://tomlev2.wordpress.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/ http://shujaatsiddiqi.blogspot.com/ 2011/02/wpf-binding-converter-parameter.html
第一种方法从 Freezable 而不是 DependencyObject 派生转换器以允许 DependencyProperties。这有效并允许您在 Whatre.Resources 部分中进行绑定,但它具有非常奇怪的行为,例如仅在第一次在整个应用程序中使用绑定时才监听绑定。
第二种方法似乎根本不起作用。当源更改时,依赖属性永远不会更新。
<pf:BindingReflector Target="{Binding Source={StaticResource DistanceConverter}, Path=Units, Mode=TwoWay}"
Source="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=g:TestWindow, AncestorLevel=1}, Path=Units, Mode=TwoWay}"/>
有谁知道这个问题的解决方案,或者这是 WPF 的一个很大的限制?