绑定StringFormat似乎无法正常工作

时间:2009-04-11 22:46:42

标签: wpf binding

我有一个DataGrid和一个Expander,如下所示:

<StackPanel>
<my:DataGrid Name="dataGrid1" AutoGenerateColumns="False"  ItemsSource="{Binding}">...</my:DataGrid>
<Expander Header="{Binding ElementName=dataGrid1, Path=SelectedItem.Name, StringFormat=Details of {0}}">...</Expander>
</StackPanel>

绑定很好,但由于某种原因,字符串格式化不起作用。它始终只显示值dataGrid1.SelectedItem.Name 我也尝试过:

StringFormat=Details of \{0\}

哪个不起作用。

我甚至尝试将Expander的HeaderStringFormat属性设置为“{0}的详细信息”,但也没有将其格式化。

我能够让这种解决方法起作用:

<Expander>
<Expander.Header>
<TextBox Text="{Binding ElementName=dataGrid1, Path=SelectedItem.Name, StringFormat=Details of {0}}"></TextBox>
</Expander.Header>
</Expander>

有谁知道为什么StringFormat不适用于Header属性?

3 个答案:

答案 0 :(得分:4)

根据http://codingcontext.wordpress.com/2008/11/17/headerformatstring-and-contentformatstring/,看起来HeaderStringFormat属性不适用于字符串格式绑定,而是指定绑定到实现{{{}的对象时使用的格式1}}。

鉴于此,我无法将字符串格式化直接用于绑定表达式,因此这可能只是一个错误。您应该尝试通知Microsoft,也许他们会修复它。

根据您的解决方法,我建议使用IFormattable而不是TextBlock,因为您可能不希望用户能够编辑TextBox标题中的文本

答案 1 :(得分:3)

我也遇到了同样的问题,在阅读了一些文章之后,尝试各种ContentStringFormatHeaderStringFormat我刚刚决定做下一件事:

<Expander Grid.Row="1" Padding="4">
                <Expander.Header>
                <TextBlock Text="{Binding ElementName=cbCategory, Path=SelectedItem.CategoryName, StringFormat='FORMATTED &quot;{0}&quot;'}"/>
                </Expander.Header>

答案 2 :(得分:0)

它可能与Header是Object类型属性而不是String有关。将String值转换为UI控件可能会干扰格式化。 Label不是TextBox,也不是TextBox吗?这应该会给你与你最初尝试的效果相同的效果。

<强>更新: 另请尝试查看HeaderStringFormat属性。