ConverterParameter - любой способ перейти в какой-то разделенный список? - PullRequest
3 голосов
/ 15 сентября 2011

В основном, если у меня есть:

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

Как бы вы передали массив элементов какого-либо типа в качестве ConverterParameter. Я подумал, что мог бы передать какой-то список с разделителями, но я не уверен, какой тип разделителя использовать, или есть встроенный способ передачи массива параметров?

Ответы [ 2 ]

6 голосов
/ 15 сентября 2011

ConverterParameter имеет тип object, что означает, что при разборе 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>
4 голосов
/ 15 сентября 2011

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>
...