2011-09-15 59 views
3

基本上,如果我有:ConverterParameter - 任何方式传入一些分隔列表?

<TextBlock Text="{Binding MyValue, Converter={StaticResource TransformedTextConverter}, 
      ConverterParameter=?}" /> 

你会如何去传递某种类型的项目,如ConverterParameter的阵列。我想我可以通过某种类型的分隔列表,但我不确定要使用哪种类型的分隔符,或者是否存在传入参数数组的内置方法?

+0

你想使用参数的一个索引myvalue的?为什么不把它解析成你的Convert方法? – Berryl

回答

4

ConverterParameterobject型的,这意味着当XAML解析不会有任何隐式转换,如果你在任何分隔的列表,通过它只会被解释为串。你当然可以在转换方法本身中分割它。

但是,因为您可能想要更复杂的对象,所以在处理静态值时可以做两件事情:创建对象数组作为资源并引用它,或者使用元素语法创建数组。

1:

<Window.Resources> 
    <x:Array x:Key="params" Type="{x:Type ns:YourTypeHere}"> 
     <ns:YourTypeHere /> 
     <ns:YourTypeHere /> 
    </x:Array> 
</Window.Resources> 

... ConverterParameter={StaticResource params} 

2:

<TextBlock> 
    <TextBlock.Text> 
     <Binding Path="MyValue" Converter="{StaticResource TransformedTextConverter}"> 
      <Binding.ConverterParameter> 
       <x:Array Type="{x:Type ns:YourTypeHere}"> 
        <ns:YourTypeHere /> 
        <ns:YourTypeHere /> 
       </x:Array> 
      </Binding.ConverterParameter> 
     </Binding> 
    </TextBlock.Text> 
</TextBlock> 
3

ConverterParameter不是依赖属性,因此不能根据结合

你可以硬编码的值,如参数的X分隔的列表,你.Split(x)在你的转换器,也可以使用一个MultiConverter它允许你发送多个绑定值到一个转换器。

<!-- Not sure the exact syntax, but I'm fairly sure you have 
    to escape the commas --> 
<TextBlock Text="{Binding MyValue, 
      Converter={StaticResource TransformedTextConverter}, 
      ConverterParameter={};@,@|}" /> 

或者

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding Converter="{StaticResource MyMultiConverter}"> 
      <Binding Path="MyValue" /> 
      <Binding Path="Parameters" /> 
     </MultiBinding> 
    </TextBlock.Text> 
<TextBlock> 
相关问题