绑定 StringFormat 似乎无法正常工作

Posted

技术标签:

【中文标题】绑定 StringFormat 似乎无法正常工作【英文标题】:Binding StringFormat doesn't seem to work correctly 【发布时间】:2010-10-18 23:05:25 【问题描述】:

我有一个像这样的 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 属性?

【问题讨论】:

【参考方案1】:

我也遇到了同样的问题,看了一些文章,尝试了各种ContentStringFormat和HeaderStringFormat,我才决定做下一件事:

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

【讨论】:

【参考方案2】:

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

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

通过您的解决方法,我建议使用TextBlock 而不是TextBox,因为您可能不希望用户能够编辑Expander 标头中的文本。

【讨论】:

好的,这是信息。谢谢。另外,我正在使用 TextBlock...我想我只是在发帖时写错了。【参考方案3】:

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

更新: 还可以尝试查看 HeaderStringFormat 属性。

【讨论】:

您确实有一点关于 Header 是一个对象而 TextBox.Text 是一个字符串。但是,我只是尝试使用标签,当我将 ContentFormatString 设置为我想要的内容时它就起作用了。 Label Content 属性也是一个对象,所以我还是不明白……Header 有点奇怪。

以上是关于绑定 StringFormat 似乎无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

根据附加的变量值,绑定类似乎无法正常工作

DataGridRow 标头与 StringFormat 绑定

Xamarin Forms:IsVisible 绑定无法正常工作

Silverlight 是不是支持 StringFormat 绑定?

DOMContentLoaded的addEventListener()无法正常工作

TextBlock:Text和StringFormat的绑定