Wpf Label.ContentTemplate中的绑定

Wpf Label.ContentTemplate中的绑定,wpf,mvvm,binding,Wpf,Mvvm,Binding,在下面的Xaml中,第一个控件(TextBlock本身)绑定和呈现RecordCount的值没有问题。但在第二个控件(带有ContentTemplate的标签)中,不会呈现RecordCount的值。然而,字面上的“汽车”是可以理解的。因此,我知道ContentTemplate正在工作,但是ContentTemplate中与RecordCount的绑定没有工作。我做错了什么 <TextBlock Text="{Binding RecordCount}"/> <Label Ho

在下面的Xaml中,第一个控件(TextBlock本身)绑定和呈现RecordCount的值没有问题。但在第二个控件(带有ContentTemplate的标签)中,不会呈现RecordCount的值。然而,字面上的“汽车”是可以理解的。因此,我知道ContentTemplate正在工作,但是ContentTemplate中与RecordCount的绑定没有工作。我做错了什么

<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 HorizontalAlignment="Center" Content="{Binding}">

或者,将StackPanel设置为内容,完全不使用模板:

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

ContentTemplate用于显示内容。由于DataContext为null,因此在实例化模板时DataContext为null。文本块仍在创建中,因此会渲染Cars,但null没有RecordCount属性,因此第一个文本块渲染时没有文本

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

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

作为替代,您可以将
记录计数
绑定到
标签
内容
,并让
数据模板
注意如何显示它

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

首先,感谢您提供的解决方案。更重要的是,谢谢你的解释。我现在完全懂机械了。但我必须把这种理解留到下一天,因为,是的,ContentStringFormat是我所需要的——我甚至不知道它的存在。再次感谢!