0

模型:

假设我有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

所以,问题。有必要允许用户选择具有以下 UI的一本书(不是类型也不是作者) :

用户界面

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

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

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

此外,您可能会提到上一个/下一个按钮。他们应该浏览书籍级别(最后一本书):例如,如果选择了最后一本书并按下 Next(见图),则 UI 的下一个状态应该是:第二流派 => 第二作者 => 某本书(第二体裁和第二作者)。

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

4

1 回答 1

0

他塞尔吉,

我只会使用一个实现您的 IBookService 的 SelectBookViewModel。此 ViewModel 包含一个Collection<Book>或一个ObservableCollection<Book>. 每次收到更新 Book-Collection 的 UpdateEvent 时,您都会对该集合执行 LINQ 查询以获取以下类型的列表:

GenreListProperty = (from book in books
                     select book.Genre).Distinct().ToList();

将您的第一个 ListView 绑定到 this GenreListPropertySelectedItem根据第一个列表框属性的更改事件,实现一些其他逻辑来查询相同样式的其他 ListView 的列表。

按钮只是在 ListViews 上进行一些导航,并在SelectedItem更改时更新它们的逻辑。当按下 Ok 按钮时,您只需对 Book-Collection 执行组合 LINQ 查询,以选择您的处理继续进行的选择一个。

于 2012-07-03T20:54:08.933 回答