我们假设我有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;
}
我有BookViewModel
课程(换Book
)。
我有ObservableCollection<BookViewModel>
与IBookService
接口的某些实现同步。
所以,问题。有必要允许用户使用以下用户界面选择其中一本书(不是流派而非作者):
BookViewModel
的扁平集合应该以某种方式按顺序“分组”(或者我不知道如何正确地称它):
因此,每个级别的后代级别都是 master 。
另外,您可能会提到上一个/下一个按钮。他们应该浏览图书级别(最后一个): 例如,如果选择最后一本书并按下下一步(参见图像),则UI的下一个状态应该是:第二种类型=&gt;第二作者=&gt;一些书(第二类和第二作者)。
如何实现如此复杂的UI:多级分组?实现这样一本书籍浏览器最简单的方法是什么? 如果你能给我一些类似的例子,我将不胜感激。
答案 0 :(得分:0)
何塞尔,
我只想使用一个实现IBookService的SelectBookViewModel。此ViewModel包含Collection<Book>
或ObservableCollection<Book>
。每次获得更新Book-Collection的UpdateEvent时,都会对此集合执行LINQ查询以获取类型列表:
GenreListProperty = (from book in books
select book.Genre).Distinct().ToList();
将您的第一个ListView绑定到此GenreListProperty
。实现一些其他逻辑,以相同的样式查询其他ListView的列表,具体取决于第一个列表框的SelectedItem
属性的Change-Events。
按钮只是在ListViews上进行一些导航,并且SelectedItem
上的更新逻辑发生了变化。当按下Ok按钮时,您只需在Book-Collection上执行组合的LINQ查询,以选择您正在处理的选择的查询。