绑定到DataTemplate

时间:2013-04-18 10:42:33

标签: wpf xaml

我有一个按钮模板:

<DataTemplate x:Key="TemplateTest">
    <Button Margin="10" BorderThickness="2" Content="{Binding Text}" />
</DataTemplate>

我想创建一个文本框和一个按钮,其内容与文本框的文本相同。

<TextBox x:Name="TextBox" Margin="10">TextBox</TextBox>
<ContentControl DataContext="{Binding ElementName=TextBox}"
    ContentTemplate="{StaticResource ResourceKey=TemplateTest}" />

但是我这样按钮上没有任何东西。

4 个答案:

答案 0 :(得分:2)

@ DanPuzey的一个在VS2012中仍然没有为我工作。不知道为什么它在Kaxaml

这样做了:

<TextBox x:Name="TextBox"
          Margin="10"
          Text="Hello World" />
<ContentControl Content="{Binding ElementName=TextBox,
                                  Path=.}"
                ContentTemplate="{StaticResource TemplateTest}" />

<DataTemplate x:Key="TemplateTest">
  <Button Height="100"
          Margin="10"
          BorderThickness="2"
          Content="{Binding Text}" />
</DataTemplate>

答案 1 :(得分:1)

这很简单,因为您没有设置内容控件的内容:设置DataContext不会改变任何内容。试试这个:

<ContentControl Content="{Binding ElementName=TextBox}" ContentTemplate="{StaticResource ResourceKey=TemplateTest}" />

以上在Kaxaml中对我有用,但如果它不适合你,那么我建议你试试这个,它明确地绑定到文本框的文本:

<ContentControl Content="{Binding Text, ElementName=TextBox}" ContentTemplate="{StaticResource ResourceKey=TemplateTest}" />

答案 2 :(得分:1)

首先,您应该将contentControl的内容设置为绑定到文本

<TextBox x:Name="TextBox" Margin="10">TextBox</TextBox>
<ContentControl Content="{Binding ElementName=TextBox,Path=Text}"
ContentTemplate="{StaticResource ResourceKey=TemplateTest}" />

现在您需要更改按钮的绑定:

<DataTemplate x:Key="TemplateTest">
<Button Margin="10" BorderThickness="2" Content="{Binding}" />
</DataTemplate>

答案 3 :(得分:1)

我不确定{Binding ElementName=TextBox}是否设置了默认Binding.Path。 您可以尝试将Path设置为.DataContext="{Binding ElementName=TextBox, Path=.}"

或者您可以直接绑定元素的Text属性:

<TextBox x:Name="TextBox" Margin="10">TextBox</TextBox>
<ContentControl DataContext="{Binding Text, ElementName=TextBox}"
    ContentTemplate="{StaticResource ResourceKey=TemplateTest}" />

<DataTemplate x:Key="TemplateTest">
    <Button Margin="10" BorderThickness="2" Content="{Binding}" />
</DataTemplate>