WPF:对“实时”数据进行分组

时间:2012-07-03 20:06:42

标签: c# wpf mvvm collectionview

型号:

我们假设我有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)UI客户端:

我有BookViewModel课程(换Book)。 我有ObservableCollection<BookViewModel>IBookService接口的某些实现同步。

所以,问题。有必要允许用户使用以下用户界面选择其中一本书(不是流派而非作者)

The UI

BookViewModel的扁平集合应该以某种方式按顺序“分组”(或者我不知道如何正确地称它):

  1. 流派。
  2. 作者(选定类型)。
  3. 书籍(选定类型和选定作者)。
  4. 因此,每个级别的后代级别都是 master

    另外,您可能会提到上一个/下一个按钮。他们应该浏览图书级别(最后一个): 例如,如果选择最后一本书并按下下一步(参见图像),则UI的下一个状态应该是:第二种类型=&gt;第二作者=&gt;一些书(第二类和第二作者)。

    如何实现如此复杂的UI:多级分组?实现这样一本书籍浏览器最简单的方法是什么? 如果你能给我一些类似的例子,我将不胜感激。

1 个答案:

答案 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查询,以选择您正在处理的选择的查询。