Связывание в Label.ContentTemplate - PullRequest
5 голосов
/ 29 августа 2010

В приведенном ниже Xaml первый элемент управления (сам по себе TextBlock) не имеет проблем с привязкой и отображением значения RecordCount. Но во втором элементе управления (Метка с ContentTemplate) значение RecordCount не отображается. Тем не менее, буквальное «Автомобили» отображается отлично. Итак, я знаю, что ContentTemplate работает, но привязка к RecordCount из ContentTemplate не работает. Что я делаю не так?

<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>

1 Ответ

12 голосов
/ 29 августа 2010

Установите для свойства 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 является нулевым, когда создается экземпляр вашего шаблона.TextBlocks все еще создаются, поэтому Cars отображается, но null не имеет свойства RecordCount, поэтому первый текстовый блок отображается без текста.

Кроме того, если вы используете только два TextBlocks для объединения текста, вы можете использовать свойство StringFormat в .NET 3.5 SP1 или новее:

<Label Content="{Binding RecordCount}" ContentStringFormat="{}{0} Cars"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...