Модель:
Предположим, что у меня есть модель Book
.
public class Book
{
public string Author { get; set; }
public string Title { get; set; }
public string Genre { get; set; }
public DateTime Published { get; set; }
}
Также у меня есть такой DataService. В нем есть события для обновления книг на стороне клиента:
public interface IBookService
{
List<Book> GetAllBooks();
// Book changed event.
EventHandler<BookChangedEventArgs> BookChanged;
// Book added/removed event.
EventHandler<BooksCollectionChangedEventArgs> BooksCollectionChanged;
}
Клиент пользовательского интерфейса WPF (MVVM):
У меня класс BookViewModel
(обертывает Book
). У меня есть ObservableCollection<BookViewModel>
, который синхронизирован с некоторой реализацией интерфейса IBookService
.
Итак, вопрос. Необходимо разрешить пользователю выбирать одну из книг (не жанр и не автора) со следующим пользовательским интерфейсом:
Плоская коллекция BookViewModel
должна быть как-то "сгруппирована" последовательно (или я не знаю, как это правильно назвать):
- Жанры.
- Авторы (выбранного жанра).
- Книги (выбранного жанра и выбранного автора).
Таким образом, каждый уровень является мастером для своего уровня-потомка.
Также вы можете упомянуть кнопки «Назад/Далее». Они должны перемещаться по уровню книг (последнему). Например, если выбрана последняя книга и вы нажимаете «Далее» (см. изображение), следующее состояние Интерфейс должен быть: Второй жанр => Второй автор => Какая-то книга (второго жанра и второго автора).
Как добиться такого сложного пользовательского интерфейса: многоуровневая группировка? Как проще всего реализовать такой браузер книг? Я был бы признателен, если бы вы могли предоставить мне подобный пример.