Нужно ли использовать конвертер при использовании Multibinding в WPF?

Я хотел бы знать, есть ли сценарии, в которых вы можете использовать Multibinding без преобразователя, и ограничения, которые вынуждают нас использовать преобразователь.

В частности, я пытаюсь связать строку с двумя другими строками в стиле string.format.


person Shumii    schedule 02.04.2013    source источник


Ответы (1)


Чаще всего вы используете MultiBinding без преобразователя, когда у вас есть строковый формат, объединяющий два отдельных значения.

сказать например:

Чтобы отформатировать имена, которые имеют первую и последнюю часть, и вы хотите отформатировать их в зависимости от локали

<StackPanel>
  <TextBlock x:Name="firstName"
              Text="John" />
  <TextBlock x:Name="lastName"
              Text="Wayne" />
  <TextBlock>
    <TextBlock.Text>
      <MultiBinding StringFormat="{}{0} {1}">
        <Binding ElementName="firstName"
                  Path="Text" />
        <Binding ElementName="lastName"
                  Path="Text" />
      </MultiBinding>
    </TextBlock.Text>
  </TextBlock>
</StackPanel>

Вы видите довольно много мест, где вы используете конвертер, поскольку с помощью MultiBinding вы делаете то же самое, что и Binding, но у вас есть несколько исходных значений, отформатированных в один результат, а не один ввод -> один вывод.

Вы можете заставить Binding принимать ConverterParameter для предоставления другого входного значения, однако у вас есть ограничения, такие как невозможность предоставить ему значение Bound во время выполнения, что делает MultiBinding более подходящим для нескольких входов, где вы хотите связать их все.

Это сводится к вашему варианту использования. Если вы хотите предоставить результат на основе различных типов ввода, которые вы оцениваете по-своему, вам нужен конвертер (очень похожий на привязку. Просто подумайте о разнице как о 1 входной привязке -able значение против нескольких)

person Viv    schedule 02.04.2013
comment
Похоже, что версия строкового формата работает только в том случае, если ваш элемент ожидает строку. В некоторых случаях вам, возможно, придется поместить мультисвязку внутри текстового блока. - person Owen Johnson; 14.02.2017