我需要创建一个特定格式的字符串,为此我使用 IMultiValueConverter。例子:
{0} of {1} in {2}
SomeValue0
SomeValue1
SomeValue2
结果是:
SomeValue0 of SomeValue1 in SomeValue2
这部分不是问题。基本上转换器接受多个字符串,其中第一个是字符串格式,后面是要格式化的字符串。
<MultiBinding Converter={...}>
<Binding>
<Binding.Source>{0} of {1} in {2}</Binding.Source>
</Binding>
<Binding Path="Value0" />
<Binding Path="Value1" />
<Binding Path="Value2" />
</MultiBinding>
当某些字符串(绑定)也需要使用 IMultiValue 转换器时,它会变得很棘手。想象一下,属性#Value1# 对于不同的语言有不同的值。通常我们也使用 IMultiValueConverter 获得这样的值:
<TextBox>
<TextBox.Text>
<MultiBinding Converter={...}>
<Binding Path="Value1"?
<Binding Path="Strings" Source="{StaticResource langResources}" />
</MultiBinding>
</TextBox.Text>
</TextBox>
当用户切换到不同的语言时,字符串字典被更新,并且 TextBox 接收新值(同样适用于将值更改为 Value1)。
现在的问题是:不能在 IMultiValueConverter 中使用 IMultiValueConverter。您也不能覆盖 BindingBase 的 ProvideValue,并且 IMultiValueConverter 将只接受 BindingBase 类型的对象。
有什么办法可以扩展 BindingBase 以便它公开一个 BindableConverterProperty,它的值将用于从 Binding 提供值?