2009-06-16 46 views
12

Tôi có một số DataTemplate Tôi muốn sử dụng lại. Phần tôi muốn đưa ra là sự ràng buộc, bởi vì đó là điều duy nhất thay đổi. My DataTemplate trông gần như thế này. (Có nhiều thực sự khá một chút để nó, nhưng tôi đã đưa ra những thứ không liên quan.)Làm thế nào tôi có thể đưa ra một ràng buộc của DataTemplate trong WPF?

<DataTemplate> 
    <TextBox Text="{Binding Name}" /> 
</DataTemplate> 

Làm thế nào tôi có thể tái sử dụng này DataTemplate trong khi chỉ đơn giản là thay đổi tài sản mà tôi đang ràng buộc? (Lưu ý rằng nếu nó đơn giản như chỉ là một TextBox, tôi sẽ không lo lắng về nó, nhưng DataTemplate thực sự chứa một số StackPane l với một số yếu tố khác trong đó. Tôi muốn tập trung ở một nơi, do đó DataTemplate .)

Tôi đã nghĩ về hai cách để giải quyết vấn đề này.

  1. Tạo điều khiển tùy chỉnh đơn giản. Sử dụng lại và đừng lo lắng về việc sử dụng lại số DataTemplate.
  2. Thử nghiệm với một số loại lớp con của DataTemplate. (Tôi nói với điều này là có thể.) Tôi muốn thêm một thuộc tính phụ thuộc vào nó cho phép tôi chỉ định tên của thuộc tính mà tôi muốn ràng buộc.

Đề xuất?

Trả lời

4

Tôi ghét trả lời các câu hỏi của riêng mình, nhưng vì mục đích hoàn chỉnh, đây là giải pháp của tôi.

<ListBox ItemsSource="{Binding}"> 
    <ListBox.Resources> 
    <ControlTemplate x:Key="textBoxControlTemplate" TargetType="ContentControl"> 
     <TextBox Text="{TemplateBinding Content}" /> 
    </ControlTemplate> 
    </ListBox.Resources> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <ContentControl Content="{Binding Name}" Template="{StaticResource textBoxControlTemplate}" /> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Điều này tất nhiên là rất dễ bị ví dụ. Trong ứng dụng của riêng tôi, tôi không thực sự đặt các hộp văn bản bên trong một hộp danh sách. Trong một ListBox, điều này không phải là rất hữu ích, nhưng hãy tưởng tượng nó bên trong một DataGrid, trong đó mỗi cột có thể được hiển thị theo cách tương tự, nhưng liên kết với một thuộc tính khác.

0

Tạo UserControl và sử dụng nó trong DataTemplate.

<DataTemplate> 
    <local:MyComplexUserControl DataContext="{Binding Name}"/> 
</DataTemplate> 

và trong UserControl:

<StackPanel> 
    <TextBlock>Value:</Text> 
    <TextBox Text="{Binding}"/> 
</StackPanel> 

Có một DataTemplate riêng biệt với ràng buộc cho mỗi dịp riêng của mình.

+0

Bạn có thể thực hiện việc này mà không cần UserControl mà tôi mong đợi - chỉ cần sử dụng một ControlTemplate trong tài nguyên. –

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