12

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

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

如何DataTemplate在简单地改变我绑定的属性的同时重用它?(请注意,如果它像 a 一样简单TextBox,我不会担心,但它DataTemplate实际上包含StackPanel 和许多其他元素。我想将它集中在一个地方,因此DataTemplate.)

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

  1. 创建一个简单的自定义控件。重用它,不要担心重用DataTemplate.
  2. 试验某种 DataTemplate 的子类。(有人告诉我这是可能的。)我会向它添加一个依赖属性,让我指定要绑定的属性的名称。

建议?

4

2 回答 2

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

于 2009-06-16T22:44:19.283 回答
0

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

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

并在用户控件中:

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

每个场合都有一个单独的 DataTemplate 和它自己的绑定。

于 2009-06-17T01:01:10.520 回答