在Label.ContentTemplate中绑定

Mar*_*man 5 wpf binding mvvm

在下面的Xaml中,第一个控件(TextBlock本身)没有问题绑定和呈现RecordCount的值.但是在第二个控件(带有ContentTemplate的Label)中,不会呈现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>
Run Code Online (Sandbox Code Playgroud)

Qua*_*ter 12

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

<Label HorizontalAlignment="Center" Content="{Binding}">
Run Code Online (Sandbox Code Playgroud)

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

<Label HorizontalAlignment="Center">
    <StackPanel Orientation="Horizontal" Width="100">
        <TextBlock Text="{Binding RecordCount}"/>
        <TextBlock Text=" Cars"/>
    </StackPanel>
</Label>
Run Code Online (Sandbox Code Playgroud)

ContentTemplate用于呈现内容.由于它为null,因此在实例化模板时,DataContext为null.仍然会创建TextBlocks,因此会渲染Cars,但null不具有RecordCount属性,因此第一个文本块将呈现为没有文本.

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

<Label Content="{Binding RecordCount}" ContentStringFormat="{}{0} Cars"/>
Run Code Online (Sandbox Code Playgroud)