Где я должен положить список UserControls и не сломать MVVM? - PullRequest
1 голос
/ 16 ноября 2010

У меня есть элемент управления вкладками, где каждый TabItem является UserControl. Я хотел бы держать UserControls в ItemsSource TabControl. Идет ли список ItemsSource в ViewModel окна? Если это так, я чувствую, что он ломает MVVM, поскольку ViewModel теперь имеет элементы управления GUI внутри. Или я помещаю этот список в код позади окна, которое содержит элемент управления вкладкой?

Любые предложения будут великолепны!

Ответы [ 4 ]

0 голосов
/ 15 апреля 2011

Вот что я сделал.Я создал интерфейс, который реализован во всех моих элементах управления, IMyAppControl, который содержит некоторую информацию, такую ​​как заголовок, описание, другие метаданные.

Мое главное окно имеет коллекцию ObservableCollection, к которой привязана вкладка ItemsSource.

0 голосов
/ 16 ноября 2010

Скорее всего, это можно сделать несколькими способами, и все они обсуждают, насколько они «дружественны к MVVM».

Моя настройка выглядит следующим образом.

Мое главное окно имеет DataContext, привязанный к MainWindowViewModel, который содержит свойство

public ObservableCollection<Workspace> WorkspaceCollection{get;set;}

MainWindow имеет TabControl, который ItemsSource связан с WorkspaceCollection

Все рабочие области являются моделями представления и привязаны к различным представлениям / пользовательским элементам управления через шаблоны данных

0 голосов
/ 17 ноября 2010

Вы можете взглянуть на Write пример приложения WPF Application Framework (WAF) .Он имеет TabControl, где каждый TabItem является UserControl, и он делает это, применяя шаблон MVVM.

0 голосов
/ 16 ноября 2010

При использовании элементов управления вкладками чаще всего отдельные вкладки создаются статически в XAML, а не во время выполнения с помощью привязки данных. Однако нет никаких причин, почему вы не должны этого делать. Если у вас есть коллекция представлений, они обязательно должны храниться в представлении.

Имейте в виду, что вы также можете привязать ItemsSource к списку объектов ViewModels, и WPF сгенерирует для вас представление с помощью ItemTemplate с объектом ViewModel, установленным как DataContext. Эта коллекция ViewModels должна храниться в модели представления, хотя в определенный момент модель представления, очевидно, должна быть сохранена в представлении.

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