Почему мой TabControl с данными не похож на мой TabControl без данных? - PullRequest
2 голосов
/ 12 июня 2009

My TabControl без привязки к данным выглядит отлично:

альтернативный текст 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 с привязкой к данным выглядит так:

альтернативный текст 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

Что я должен изменить, чтобы мой табулированный элемент управления с привязкой к данным был похож на мой обычный табулированный контроль без привязки к данным?

Ответы [ 2 ]

4 голосов
/ 12 июня 2009

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 голосов
/ 12 июня 2009

Я думаю, что здесь происходит то, что весь DataTemplate установлен в Заголовок TabItem. Взгляните на эту ссылку, она дает пример для заголовка и ContentTemplate для TabControl: http://psiman.wordpress.com/2006/12/07/databound-master-detail-tabcontrol/

...