wpf - 在 Label.ContentTemplate 中绑定(bind)

标签 wpf mvvm binding

在下面的 Xaml 中,第一个控件(TextBlock 本身)在绑定(bind)和呈现 RecordCount 的值时没有问题。但在第二个控件(带有 ContentTemplate 的 Label)中,RecordCount 的值未呈现。然而,字面的“汽车”渲染得很好。所以我知道 ContentTemplate 正在工作,但从 ContentTemplate 内部到 RecordCount 的绑定(bind)却不起作用。我做错了什么?

<TextBlock Text="{Binding RecordCount}"/>

<Label HorizontalAlignment="Center" >
     <Label.ContentTemplate>
          <DataTemplate>
               <StackPanel Orientation="Horizontal" Width="100">
                    <TextBlock Text="{Binding RecordCount}"/>
                    <TextBlock Text=" Cars"/>
               </StackPanel>
          </DataTemplate>
     </Label.ContentTemplate>
</Label>

最佳答案

将 Label 上的 Content 属性设置为当前的 DataContext:

<Label HorizontalAlignment="Center" Content="{Binding}">

或者,将 StackPanel 设置为内容并且根本不使用模板:

<Label HorizontalAlignment="Center">
    <StackPanel Orientation="Horizontal" Width="100">
        <TextBlock Text="{Binding RecordCount}"/>
        <TextBlock Text=" Cars"/>
    </StackPanel>
</Label>

ContentTemplate 用于呈现内容。由于它为 null,因此在实例化模板时 DataContext 也为 null。 TextBlock 仍会被创建,因此 Cars 会被渲染,但 null 没有 RecordCount 属性,因此第一个文本 block 会渲染为没有文本。

此外,如果您仅使用两个 TextBlock 来连接文本,则可以使用 .NET 3.5 SP1 或更高版本中的 StringFormat 属性:

<Label Content="{Binding RecordCount}" ContentStringFormat="{}{0} Cars"/>

关于wpf - 在 Label.ContentTemplate 中绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3595512/

相关文章:

wpf更改日历日标题前景色

c# - 附属属性(property)。如何在 PropertyChangedCallback 中使用 SetValue

c# - Excel 应用程序单例 - 仅使用一个 Excel 应用程序实例而不退出的可能威胁?

asp.net-mvc - ASP.NET 中的 Dapper、ODATA 和 IQueryable

binding - 调用 ko.applyBindings 后添加绑定(bind)

WPF : Define binding's default

c# - CoreAudio OnVolumeNotification 事件订阅导致 explorer.exe 中 CPU 使用率高

c# - 如何针对 ListCollectionView 编写 linq 查询?

javascript - 删除和编辑 knockout observableArray 中的项目

Java/Sql-server 参数绑定(bind)未按预期工作