Привязка коллекции моделей представления к WPF MVVM TabControl - PullRequest
0 голосов
/ 15 мая 2018

У меня есть коллекция ViewModels, которую я хочу привязать к свойству ItemsSource TabControl и иметь возможность добавлять / удалять их динамически, поэтому реализовано как Observable<TabViewModel>.

Однако TabControl, похоже, ожидает типы, которые наследуются от TabItem, который является объектом визуального контроля. Я не хочу, чтобы мои ViewModel наследовали от TabItem, поскольку это означает, что они должны быть привязаны к визуальной реализации, а также все тесты должны выполняться как STA.

Как связать коллекцию ViewModels для заполнения заголовков и содержимого элемента управления вкладкой, не завися от объекта TabItem? Т.е. я просто использую стили и шаблоны, основанные на типе ViewModel. Точно так же, как если бы у вас был ListBox и вы хотели, чтобы элементы отображались непосредственно из экземпляров viewmodel, с определенным шаблоном, это легко сделать, переопределив свойство ItemTemplate.

Как мне сделать это с TabControl без использования TabItem?

1 Ответ

0 голосов
/ 15 мая 2018

Как связать коллекцию ViewModels для заполнения заголовков и содержимого элемента управления вкладкой, не завися от объекта TabItem?

Попробуйте это:

Просмотр:

<TabControl ItemsSource="{Binding Items}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Header}" />
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Content}" />
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

Просмотр модели:

public class TabViewModel
{
    public TabViewModel()
    {
        Items = new ObservableCollection<Item>()
        {
            new Item { Header = "a", Content = "..." },
            new Item { Header = "b", Content = "..." },
            new Item { Header = "c", Content = "..." },
        };
    }

    public ObservableCollection<Item> Items { get; set; }
}

Item является классом POCO.

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