如何在WPF中分离DataTemplate的绑定?

12

我有一个要重复使用的DataTemplate。我想要提取的部分是绑定,因为它是唯一改变的东西。我的DataTemplate大致如下。 (实际上还有很多其他内容,但我已经删除了无关的内容。)

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

如何重复使用这个DataTemplate,同时仅改变我绑定的属性?(请注意,如果只是一个简单的TextBox,我就不会担心了,但实际上DataTemplate包含一个StackPanel,里面还有许多其他元素。我想将其集中在一个地方,因此使用DataTemplate。)

我考虑了两种解决方法。

  1. 创建一个简单的自定义控件。重复使用它,不必担心重复使用DataTemplate
  2. 尝试一些DataTemplate的子类。(我听说这是可能的。)我将添加一个依赖属性,以指定我要绑定的属性名称。

建议?

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


0
创建一个UserControl并在DataTemplate中使用它。
<DataTemplate>
    <local:MyComplexUserControl DataContext="{Binding Name}"/>
</DataTemplate>

在 UserControl 中:

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

为每个场合准备一个独立的 DataTemplate,并进行自己的绑定。


您可以不使用UserControl,而是在资源中使用ControlTemplate来实现这一点。 - Drew Noakes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接