首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF:分组“实时”数据

WPF:分组“实时”数据
EN

Stack Overflow用户
提问于 2012-07-03 20:06:42
回答 1查看 366关注 0票数 0

型号:

让我们假设我有Book模型。

代码语言:javascript
复制
public class Book
{
    public string Author { get; set; }
    public string Title { get; set; }
    public string Genre { get; set; }
    public DateTime Published { get; set; }
}

而且,我有这样一个DataService。它拥有使客户端的账簿保持最新的事件:

代码语言:javascript
复制
public interface IBookService
{
    List<Book> GetAllBooks();

    // Book changed event.
    EventHandler<BookChangedEventArgs> BookChanged;

    // Book added/removed event.
    EventHandler<BooksCollectionChangedEventArgs> BooksCollectionChanged;
}

WPF (MVVM) UI客户机:

我有BookViewModel类(wraps Book)。我有一个ObservableCollection<BookViewModel>,它与IBookService接口的一些实现同步。

所以问题是。有必要允许用户使用选择一本书(不是流派,而不是作者)的,其UI如下:

BookViewModel的平面集合应该按顺序进行“分组”(或者我不知道如何正确称呼它):

  1. 类型。
  2. 作者(选定类型的)。
  3. 书籍(选定的体裁和作者)。

因此,每个级别都是其后代级别的

此外,您还可以提到前一个/下一个按钮。他们应该浏览图书级别的(最后一个):例如,如果选择了最后一本书,然后按next (请参阅图像),UI的下一个状态应该是: second state =>第二作者=> Some (属于第二种类型和第二作者)。

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

EN

回答 1

Stack Overflow用户

发布于 2012-07-03 20:54:08

他是瑟吉

我只需要使用一个SelectBookViewModel来实现您的IBookService。这个ViewModel包含一个Collection<Book>或一个ObservableCollection<Book>。每次获得更新图书集的UpdateEvent时,都会对该集合执行LINQ查询,以获得以下类型的列表:

代码语言:javascript
复制
GenreListProperty = (from book in books
                     select book.Genre).Distinct().ToList();

将您的第一个ListView绑定到这个GenreListProperty。根据第一个列表框的ListViews属性的更改事件,执行其他逻辑来查询其他SelectedItem的相同样式的列表。

这些按钮只是在ListViews上进行一些导航,并且它们在SelectedItem上的更新逻辑发生了变化。当按下Ok按钮时,您只需在Book-Collection上执行一个组合LINQ查询,以选择您的处理过程中所选择的一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11318396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档