#c_sharp #wpf #xaml #mvvm #binding
Есть задача, отображения коллекции данных отфильтрованных и разделённых на 5 вкладок. Например есть коллекция сериалов и в каждой вкладке либо запланированные к просмотру, либо просмотренные, либо брошенные на середине. Есть также коллекция комиксов, с точно такой же сортировкой по вкладкам. Приложение отображает либо список сериалов, либо список комиксов. У сериалов есть помимо прочего поле "Серии", у комиксов же вместо этого есть поля "Главы" и "Тома". То есть классы для них различаются. Нужно, чтобы программа работала в одном из двух режимов (либо только для комиксов, либо только для сериалов). Кнопки переключения есть в главном меню. Вопрос: можно ли подобное реализовать с помощью одного TabControl, при условии следования паттернам MVVM? Сейчас это реализовано следующим образом:То есть, я использую 2 TabControl'а и в зависимости от режима отображаю лишь один из них. Не знаю, на сколько правильный такой подход, поэтому и спрашиваю совета у SO.
Ответы
Ответ 1
Можно обойтись с использованием ContentControl и заданием DataTemplate для каждого объекта(для сериалов и для комиксов). Создадим базовый класс представляющий собой родителя для комиксов и сериалов. public class BaseVM : INotifyPropertyChanged { //какие-то свойства //реализация INotifyPropertyChanged } Создадим производные классы: public class MangaVM : BaseVM { public ObservableCollection<тип_комикса> MangaList { get; set; } } public class AnimeVM : BaseVM { public ObservableCollection<тип_сериала> AnimeList { get; set; } } public ListEntertainments { get; set; } //список который будет в меню выбора public BaseVM SelectedEntertainment { get; set; }//выбранный элемент в зависимости от которого //будет меняться шаблон представления теперь XAML: Элемент описывающий меню с выбором я сделал в качестве ListBox: Теперь сам ContentControl. ContentControl сам подберет нужный шаблон представления в зависимости от типа привязанного элемента свойству Content P.S. Ваша реализация со сменой контролов через Visibility имеет право жить. Так как, при смене Visibility не происходит повторно отрисовка контрола, в отличие от ContentControl при смене Content'a. Такое решение я применяю когда контрол сложный, содержит много дочерних элементов.
Комментариев нет:
Отправить комментарий