Подтвердить что ты не робот

WPF TabControl Databinding

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

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

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

Элемент управления вкладкой должен отображать вкладку для каждой PageModel.

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

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

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

4b9b3361

Ответ 1

<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}"/>

Ответ 2

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

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