2009-06-16 55 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