WPF TabControl Databinding - PullRequest
       12

WPF TabControl Databinding

27 голосов
/ 26 марта 2009

Я пытаюсь создать пользовательский интерфейс WPF, содержащий TabControl и TextBlock.

Я хочу связать эти два элемента управления с базовой коллекцией экземпляров следующего класса:

class PageModel
{
  public string Title {get;set;}
  public string TabCaption {get;set;}
  public FrameworkElement TabContent {get;set}
}

В элементе управления вкладками должна отображаться вкладка для каждой модели страницы.

  • В заголовке каждой вкладки должно отображаться свойство TabCaption
  • Содержимое каждой вкладки должно быть свойством TabContent.

TextBlock должен отображать заголовок выбранной в данный момент вкладки.

Как мне достичь этого результата?

Ответы [ 2 ]

63 голосов
/ 26 марта 2009
<TabControl x:Name="_tabControl" ItemsSource="{Binding PageModels}">
    <TabControl.ItemContainerStyle>
        <Style TargetType="TabItem">
            <Setter Property="Header" Value="{Binding TabCaption}"/>
            <Setter Property="Content" Value="{Binding TabContent}"/>
        </Style>
    </TabControl.ItemContainerStyle>
</TabControl>
<TextBlock Text="{Binding SelectedItem.Title, ElementName=_tabControl}"/>
7 голосов
/ 31 августа 2012

Я также нашел другое решение для этого здесь , используя ItemTemplate и ContentTemplate.

Также для любого новичка WPF, такого как я, после некоторых головных болей и разочарований я понял, что коллекция моделей страниц должна быть ObservableCollection<PageModel> вместо List<PageModel>, иначе любые изменения в списке не будут отражены вкладками (т.е. вы не можете добавить или удалить вкладку, если это список).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...