在WPF中使用Multibinding时,是否必须使用转换器?

4
我想知道是否存在可以在不使用转换器的情况下使用Multibinding的场景,以及迫使我们使用转换器的限制。
特别地,我正在尝试将一个字符串以string.format的方式绑定到另外两个字符串上。
1个回答

4

最常使用没有转换器的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提供另一个输入值,但是您有限制,例如不能向其提供运行时绑定值,这使MultiBinding更适合于要绑定所有输入的多个输入。
它归结为您的用例。如果您想基于您以自定义方式评估的不同输入类型来提供结果,则需要转换器(与Binding非常相似。只需将差异视为1个可绑定输入值与多个)。

3
看起来字符串格式版本只在元素期望字符串时才有效。在某些情况下,您可能需要将多绑定放在TextBlock中。 - Owen Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接