如何计算出数据模板';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>