我想要重用DataTemplate
。我要分解的部分是绑定,因为它是唯一改变的东西。我的DataTemplate
看起来大致如此。 (实际上还有更多的内容,但我已经拿出了无关紧要的内容。)
<DataTemplate>
<TextBox Text="{Binding Name}" />
</DataTemplate>
如何只是改变我绑定的属性,如何重用此DataTemplate
? (请注意,如果它只是TextBox
那么简单,我不会担心,但DataTemplate
实际上包含一个StackPane
l,其中包含许多其他元素。我想将它集中在一个地方,因此DataTemplate
。)
我已经考虑过两种方法来解决这个问题。
DataTemplate
。建议?
答案 0 :(得分: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中,其中每列可能以类似的方式显示,但绑定到不同的属性。
答案 1 :(得分:0)
创建UserControl并在DataTemplate中使用它。
<DataTemplate>
<local:MyComplexUserControl DataContext="{Binding Name}"/>
</DataTemplate>
并在UserControl中:
<StackPanel>
<TextBlock>Value:</Text>
<TextBox Text="{Binding}"/>
</StackPanel>
每个场合都有一个单独的DataTemplate,它有自己的绑定。