如何计算出数据模板';WPF中的绑定是什么?

如何计算出数据模板';WPF中的绑定是什么?,wpf,xaml,datatemplate,Wpf,Xaml,Datatemplate,我有一个DataTemplate我想重用。我想考虑的部分是绑定,因为它是唯一改变的东西。我的DataTemplate大致如下所示。(实际上还有很多,但我已经去掉了一些无关的东西。) 如何在简单地更改绑定到的属性的同时重用此DataTemplate?(请注意,如果它像一个文本框那样简单,我不会担心它,但是DataTemplate实际上包含一个StackPanel,其中包含许多其他元素。我想把它集中在一个地方,因此DataTemplate) 我想了两种方法来解决这个问题 创建一个简单的自定义控件

我有一个
DataTemplate
我想重用。我想考虑的部分是绑定,因为它是唯一改变的东西。我的
DataTemplate
大致如下所示。(实际上还有很多,但我已经去掉了一些无关的东西。)


如何在简单地更改绑定到的属性的同时重用此
DataTemplate
?(请注意,如果它像一个
文本框那样简单,我不会担心它,但是
DataTemplate
实际上包含一个
StackPane
l,其中包含许多其他元素。我想把它集中在一个地方,因此
DataTemplate

我想了两种方法来解决这个问题

  • 创建一个简单的自定义控件。重用它,不要担心重用
    DataTemplate
  • 使用DataTemplate的某些子类进行实验。(我被告知这是可能的。)我会向其中添加一个依赖属性,让我指定要绑定到的属性的名称

  • 建议?

    我讨厌回答我自己的问题,但为了完整起见,这里是我的解决方案

    <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中,每个列可能以类似的方式显示,但绑定到不同的属性。

    创建一个UserControl并在DataTemplate中使用它

    <DataTemplate>
        <local:MyComplexUserControl DataContext="{Binding Name}"/>
    </DataTemplate>
    
    
    
    在用户控件中:

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

    每种情况都有一个单独的DataTemplate,它有自己的绑定。

    您可以在不使用UserControl的情况下完成这项工作,我希望您只需在资源中使用ControlTemplate即可。
    <StackPanel>
      <TextBlock>Value:</Text>
      <TextBox Text="{Binding}"/>
    </StackPanel>