我需要创建一个特定格式的字符串,我使用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>
当某些字符串(Binding)也需要使用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提供值?
答案 0 :(得分:0)
当一些字符串(Binding)也需要使用IMultiValue转换器时,很棘手。
为什么不将字符串的IMultivalue转换器的智能放入一个专门的类中,ToString()
将根据当前的环境设置输出正确的字符串?这将消除您所描述的 sub 多值转换器的需要,但需要在父MultiValue转换器的框架内工作。
我推荐的超级字符串类只需要订阅一个事件,通知它使用哪个字典。然后,当调用ToString()
时,正确的字符串将传递给顶级转换器。