【问题标题】:Binding string concatenation for ListBoxItemListBoxItem 的绑定字符串连接
【发布时间】:2011-09-26 23:55:29
【问题描述】:

我有一个列表框,我想显示我的对象的两个属性。
对于一个属性,这很容易:

<ListBox.ItemTemplate>
   <DataTemplate>
     <TextBlock  Text="{Binding Name} "></TextBlock>                                        
    </DataTemplate>
</ListBox.ItemTemplate>

但是我想要类似的东西

Name - GroupName不仅仅是名字...

我知道这很容易,但我很困惑。我不知道如何将两个文本块添加到 XAML 层次结构的同一级别。

【问题讨论】:

    标签: .net wpf xaml data-binding


    【解决方案1】:

    您可以通过多种方式做到这一点。一个是MultiBindingStringFormat

    <TextBlock>
      <TextBlock.Text>
        <MultiBinding StringFormat="{}{0} - {1}">
            <Binding Path="Name" />
            <Binding Path="GroupName" />
        </MutliBinding>
      </TextBlock.Text>
    </TextBlock>
    

    第二个选项是将DataTemplate 的根元素设置为可以有多个子元素的元素,例如StackPanel,并且必须将TextBlock 控件的每个控件绑定到适当的值。

    <DataTemplate>
      <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Path=Name}" />
        <TextBlock Text=" - " />
        <TextBlock Text="{Binding Path=GroupName}" />
      </StackPanel>
    </DataTemplate>
    

    我更喜欢第一个选项。

    【讨论】:

    • 您也可以使用 TextBlock 代替 StackPanel(我认为更简洁):&lt;TextBlock&gt;&lt;Run Text="..."/&gt;&lt;Run Text="..."/&gt;&lt;/TextBlock&gt;
    • @H.B.我总是忘记Run 在 4.0 中是可绑定的;出于习惯,我仍然在面板中思考。
    猜你喜欢
    • 2011-01-01
    • 2016-09-12
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    相关资源
    最近更新 更多