25

Mam następujący uproszczony przykład:Jak do wiązania danych w DataTemplate z ContentControl

<Window x:Class="TemplateBinding.MainWindow" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      Title="MainWindow" Height="350" Width="525"> 
     <Window.Resources> 
      <ResourceDictionary> 
       <ResourceDictionary.MergedDictionaries> 
        <ResourceDictionary 
          Source="pack://application:,,,/TemplateBinding;component/PersonTemplate.xaml" /> 
       </ResourceDictionary.MergedDictionaries> 
      </ResourceDictionary> 
     </Window.Resources> 
     <Grid> 
      <ContentControl ContentTemplate="{StaticResource PersonTemplate}" /> 
     </Grid> 
    </Window> 

With:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

     <DataTemplate x:Key="PersonTemplate"> 
      <Border Width="100" Height="100" Background="RosyBrown"> 
       <TextBlock Text="{Binding Path=FirstName}" VerticalAlignment="Center" TextAlignment="Center"/> 
      </Border> 
     </DataTemplate> 

    </ResourceDictionary> 

jako mojego DataTemplate w osobnym pliku ResourceDictionary.

Ustawiłem DataContext w Construcor mojego MainWindow i zweryfikowałem go po prostu wyświetlając imię takie jak to: <ContentControl Grid.Row="1" Content="{Binding FirstName}"/>.

W innym scenariuszu, gdy używam DataTemplate z ListBox, robię wiązanie dokładnie w ten sam sposób w moim DataTemplate i to po prostu działa.

Wiem, że DataTemplate działa z wyjątkiem wiązania, ponieważ poprawnie pokazuje rozmiar i kolor tła.

Co robię źle? Jak powinien wyglądać Binding w moim DataTemplate?

Odpowiedz

54

Trzeba powiązać Content -property z ContentControl

<ContentControl Content="{Binding}" ContentTemplate="{StaticResource PersonTemplate}" /> 

Spowoduje to ustawienie DataContext z ContentControl jako Treść kontrolą.

Ustawienie tylko właściwości ContentTemplate nie jest wystarczające. ContentControl nie wykorzystuje domyślnie swojego DataContext jako Content.

+1

Czy masz link do dokumentów na ten temat? Całkowicie rozwiązał mój problem, ale jestem ciekawy, czy są jakieś inne pułapki. –

Powiązane problemy