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 должен отображать заголовок текущей выбранной вкладки.
Как я могу достичь этого результата?
Ответы
Ответ 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>
или любые изменения в списке не будут отображаться вкладками (т.е. вы не можете добавить или удалить вкладку, если это список).