шаблон данных управления вкладками - PullRequest
1 голос
/ 09 февраля 2011

Я хочу TabControl, где каждый элемент вкладки представляет (Сотрудник) ViewModel;заголовок должен быть свойством DisplayName этой модели представления, а содержимое должно быть пользовательским элементом управления (EmployeeDetailsView), который имеет контекст данных модели представления.

Итак, pidgeon xaml (есть такая вещь ??):

<TabControl x:Name="Items">
    <TabItem Header="DisplayName" Content=local:EmployeeDetailsView />
<TabControl>

Как должен выглядеть мой настоящий XAML?

Cheers,
Berryl

EDIT для Vortex

        <TabControl x:Name="Items" >
            <TabControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding DisplayName}" />
                </DataTemplate>
            </TabControl.ItemTemplate>
            <TabControl.ContentTemplate>
                <DataTemplate>
                    <ContentControl>
                        <local:EmployeeDetailView/>
                    </ContentControl>
                </DataTemplate>
            </TabControl.ContentTemplate>
         </TabControl>

1 Ответ

3 голосов
/ 09 февраля 2011

В 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>
...