使用具有多个绑定的StringFormat进行Multibinding的较短xaml语法是什么?

Jun*_*r M 8 wpf xaml binding string-formatting multibinding

对于单个绑定,我们使用:

<TextBlock>
  <TextBlock.Text>
    <MultiBinding StringFormat="{}{0}">
      <Binding Path=EmployeeName/>
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

或更短的语法:

<TextBlock 
 Text="{MultiBinding StringFormat=\{0\}, Bindings={Binding Path=EmployeeName}}"/>
Run Code Online (Sandbox Code Playgroud)

现在,如果你有多重绑定:

<TextBlock>
  <TextBlock.Text>
    <MultiBinding StringFormat="{}{0}, {2}">
      <Binding Path="EmployeeName"/>
      <Binding Path="Age"/>
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

我想知道,它的短语法是什么?

<TextBlock 
 Text="{MultiBinding StringFormat=\{0\}, Bindings={Binding ??????}"/>
Run Code Online (Sandbox Code Playgroud)

Hei*_*nzi 5

根据MSDN,您的第二个示例("使用带有单个绑定的MultiBinding的较短语法")不应该在.net 3.5.net 4.0中都不起作用:

注意:

MultiBinding和PriorityBinding不支持XAML扩展语法(尽管共享相同的BindingBase类,它实际上实现了Binding的XAML行为).

所以,如果它适合你,那是偶然的,并且它不受支持的行为.


PS:您不需要将MultiBinding用于单个绑定.以下应该足够了:

<TextBlock>
    <TextBlock.Text>
        <Binding Path="EmployeeName" />
    </TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

要么

<TextBlock Text="{Binding Path=EmployeeName}"/>
Run Code Online (Sandbox Code Playgroud)

甚至更短

<TextBlock Text="{Binding EmployeeName}"/>
Run Code Online (Sandbox Code Playgroud)