我想要重用 DataTemplate 。我要分解的部分是绑定,因为它是唯一改变的东西。我的 DataTemplate 看起来大致如此。 (实际上还有更多的内容,但我已经拿出了无关紧要的内容。)

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

如何简单地改变我绑定的属性,如何重用此 DataTemplate ? (注意,如果它只是一个 TextBox 那么简单,我不会担心它,但 DataTemplate 实际上包含一个 StackPane l其中包含许多其他元素。我想将它集中在一个地方,因此 DataTemplate 。)

我已经考虑过两种方法来解决这个问题。

  1. 创建一个简单的自定义控件。重用它,不要担心重用 DataTemplate
  2. 尝试使用某种DataTemplate子类。 (我被告知这是可能的。)我将添加一个依赖属性,它允许我指定要绑定的属性的名称。
  3. 建议?

有帮助吗?

解决方案

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

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

并在UserControl中:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top