2009-06-16 161 views
12

我有一個DataTemplate我想重複使用。我想分解的部分是綁定,因爲它是唯一發生變化的東西。我的DataTemplate看起來大致如此。 (還有更多的它實際上相當多的,但我已經取出多餘的東西。)如何分解WPF中的DataTemplate綁定?

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

如何,我可以重用此DataTemplate而簡單地改變屬性到我結合? (請注意,如果它只是一個簡單的只是一個TextBox,我不會擔心它,但DataTemplate實際上包含一個StackPane升與其他一些其他元素,我想集中在一個地方,因此DataTemplate

我想過解決這個問題的兩種方法。

  1. 創建一個簡單的自定義控件。重複使用,不用擔心重複使用DataTemplate
  2. 嘗試使用某種DataTemplate的子類。 (我被告知這是可能的。)我會添加一個依賴項屬性,讓我指定我想要綁定的屬性的名稱。

建議?

回答

4

我討厭回答我自己的問題,但爲了完整起見,這裏是我的解決方案。

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

當然這是一個非常做作示例。在我自己的應用程序中,我實際上並沒有將文本框放在列表框中。在列表框中,這不是很有用,但想象它在DataGrid中,其中每個列可能以類似的方式顯示,但綁定到不同的屬性。

0

創建一個UserControl並在DataTemplate中使用它。

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

和用戶控件中:

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

有它自己的每次綁定一個獨立的DataTemplate。

+0

你可以做到這一點沒有UserControl我期望 - 只是在資源中使用ControlTemplate。 – 2009-07-23 07:56:16

相關問題