WPF数据模板绑定
本文关键字:绑定 数据 WPF | 更新日期: 2023-09-27 18:11:05
我发现在WPF TabControl中使用ContentTemplate/DataTemplate时,我的绑定将不再工作。
我举了一个小例子来说明:
<Window x:Class="HAND.BindingExample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="BindingExample" Height="506" Width="656"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
>
<Grid>
<TabControl HorizontalAlignment="Left" Height="381" VerticalAlignment="Top" Width="608">
<TabItem Header="TabItem">
<Label Content="{Binding Path=myString}"/>
</TabItem>
<TabItem Header="TabItem">
<TabItem.ContentTemplate>
<DataTemplate>
<Label Content="{Binding Path=myString}"/>
</DataTemplate>
</TabItem.ContentTemplate>
</TabItem>
</TabControl>
</Grid>
</Window>
Tab1按预期工作,Tab2为空。
背后的代码:
using System.Windows;
namespace HAND
{
public partial class BindingExample : Window
{
public string myString { get; set; }
public BindingExample()
{
myString = "Hello Stackoverflow";
InitializeComponent();
}
}
}
您使用ContentTemplate
属性不正确。从MSDN上的ContentControl.ContentTemplate
属性页:
获取或设置用于显示ContentControl的内容的数据模板。
因此,在设置此属性时,还需要将Content
属性设置为某种数据源:
<TabControl>
<TabItem Header="TabItem">
<Label Content="{Binding Path=myString}"/>
</TabItem>
<TabItem Header="TabItem" Content="{Binding Path=myString}">
<TabItem.ContentTemplate>
<DataTemplate>
<Label Content="{Binding}" />
</DataTemplate>
</TabItem.ContentTemplate>
</TabItem>
</TabControl>
<TabItem Content="{Binding myString}" Header="TabItem">
<TabItem.ContentTemplate>
<DataTemplate>
<Label Content="{Binding}" />
</DataTemplate>
</TabItem.ContentTemplate>
</TabItem>
但正如你所知,把一扇窗户绑在自己身上并不是一条路。我不知道你这样做是否只是为了示例,但如果不是,请尝试创建一个合适的viewModel来绑定你的窗口;(