代码之家  ›  专栏  ›  技术社区  ›  Edward Tanguay

为什么我的数据绑定TabControl不像我的非数据绑定TabControl?

  •  2
  • Edward Tanguay  · 技术社区  · 16 年前

    我的 非数据绑定TabControl 看起来很好:

    alt text http://tanguay.info/web/external/tabControlPlain.png

    <TabControl Width="225" Height="150">
        <TabItem Header="One">
            <TextBlock Margin="10" Text="This is the text block"/>
        </TabItem>
        <TabItem Header="Two"/>
        <TabItem Header="Three"/>
        <TabItem Header="Four"/>
    </TabControl>
    

    但是我的 数据绑定TabControl 如下所示:

    alt text http://tanguay.info/web/external/tabBound.png

    <Window.Resources>
        <DataTemplate x:Key="TheTabControl">
            <TabItem Header="{Binding Title}">
                <TextBlock Text="{Binding Description}" Margin="10"/>
            </TabItem>
        </DataTemplate>
    </Window.Resources>
    
    <TabControl Width="225" Height="150" ItemsSource="{Binding AreaNames}"
                ItemTemplate="{StaticResource TheTabControl}">
    </TabControl>
    
    public MainViewModel()
    {
        AreaNames.Add(new Area { Title = "Area1", Description = "this is the description for area 1" });
        AreaNames.Add(new Area { Title = "Area2", Description = "this is the description for area 2" });
        AreaNames.Add(new Area { Title = "Area3", Description = "this is the description for area 3" });
    }
    
    #region ViewModelProperty: AreaNames
    private ObservableCollection<Area> _areaNames = new ObservableCollection<Area>();
    public ObservableCollection<Area> AreaNames
    {
        get
        {
            return _areaNames;
        }
    
        set
        {
            _areaNames = value;
            OnPropertyChanged("AreaNames");
        }
    }
    #endregion
    

    我必须更改什么才能使数据绑定TabControl看起来像常规的非数据绑定TabControl?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Matt Hamilton    16 年前

    TabControl使用两个不同的模板来定义其结构。itemtemplate用于标题(“选项卡”),contenttemplate用于每个选项卡下显示的内容。

    此XAML看起来更像您的第一个屏幕截图:

    <Window.Resources>
        <DataTemplate x:Key="TabHeaderTemplate">
            <TextBlock Text="{Binding Title}"/>
        </DataTemplate>
    
        <DataTemplate x:Key="TabItemTemplate">
            <TextBlock Text="{Binding Description}" Margin="10"/>
        </DataTemplate>
    </Window.Resources>
    
    <TabControl Width="225" Height="150" 
                ItemsSource="{Binding AreaNames}"            
                ContentTemplate="{StaticResource TabItemTemplate}"         
                ItemTemplate="{StaticResource TabHeaderTemplate}" />
    
        2
  •  2
  •   user112889    16 年前

    我认为这里发生的是,整个数据模板都被设置为tabItem的头部。看看这个链接,它为TabControl的头和ContentTemplate提供了一个示例: http://psiman.wordpress.com/2006/12/07/databound-master-detail-tabcontrol/

    推荐文章