25

Tôi có Ví dụ đơn giản sau:Làm thế nào để liên kết với dữ liệu trong một DataTemplate của một 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> 

Với:

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

như DataTemplate của tôi trong một tập tin ResourceDictionary riêng biệt.

Tôi đặt DataContext của mình trong Construcor của MainWindow của tôi và đã xác minh bằng cách chỉ hiển thị tên đầu tiên như sau: <ContentControl Grid.Row="1" Content="{Binding FirstName}"/>.

Trong một trường hợp khác, trong đó tôi sử dụng DataTemplate với ListBox Tôi làm Ràng buộc chính xác theo cách tương tự trong DataTemplate của tôi và nó chỉ hoạt động.

Tôi biết rằng DataTemplate đang hoạt động ngoại trừ ràng buộc vì nó hiển thị chính xác kích thước và màu nền.

Tôi đang làm gì sai? Làm thế nào các ràng buộc trong DataTemplate của tôi phải nhìn?

Trả lời

54

Bạn cần phải ràng buộc Content -Property của ContentControl

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

này sẽ đặt DataContext của ContentControl như nội dung của điều khiển.

Chỉ đặt thuộc tính ContentTemplate là không đủ. ContentControl không ngầm sử dụng DataContext làm Nội dung.

+1

Bạn có liên kết đến tài liệu về điều này không? Nó hoàn toàn giải quyết vấn đề của tôi nhưng tôi tò mò nếu có bất kỳ gotchas khác. –

Các vấn đề liên quan