В WPF это довольно просто. Но в silverlight я использовал пользовательский TabControl.
Silverlight
Вы можете найти источник и пример здесь (MyTabControl.cs), где я ответил на аналогичный вопрос.
А теперь ваш код должен выглядеть примерно так:
<my:MyTabControl x:Name="myTabs" MyItemsSource="{Binding Items}" MySelectedItem="{Binding SelectedItem}" >
<my:MyTabControl.TabHeaderItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding DisplayName}" />
</DataTemplate>
</my:MyTabControl.TabHeaderItemTemplate>
<my:MyTabControl.TabItemTemplate>
<DataTemplate>
<local:EmployeeDetailsView />
</DataTemplate>
</my:MyTabControl.TabItemTemplate>
</my:MyTabControl>
В коде позади или где-то:
var items = new List<Employee>(){
new Employee{DisplayName = "Employee 1"},
new Employee{DisplayName = "Employee 2"}};
myTabs.DataContext = new SomeCollectionModel
{
Items = items,
SelectedItem = items[0]
};
WPF
WPF имеет встроенную поддержку шаблонов данных в TabControl, поэтому я должен сделать несколько небольших изменений в XAML:
<TabControl x:Name="myTabs" ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding DisplayName}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<local:EmployeeDetailsView />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>