ConverterParameter——任何传递分隔列表的方式

本文关键字:方式 列表 任何传 ConverterParameter 分隔 | 更新日期: 2023-09-27 18:08:38

基本上,如果我有:

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

如何将某种类型的项数组作为ConverterParameter传入?我认为我可以传入某种类型的分隔符列表,但我不确定使用哪种类型的分隔符,或者是否有一种内置的方法来传入参数数组?

ConverterParameter——任何传递分隔列表的方式

ConverterParameterobject类型,这意味着在解析XAML时不会有任何隐式转换,如果您传递任何分隔列表,它将被解释为字符串。当然,你可以在convert方法中拆分它。

但是当你可能想要更复杂的对象时,你可以在处理静态值时做两件事:创建对象数组作为资源并引用它,或者使用元素语法在适当的地方创建数组,例如

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>

ConverterParameter不是一个依赖属性,所以不能基于绑定

您可以硬编码一个值,例如您在转换器中.Split(x)的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>