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) UI クライアント:

私はBookViewModelクラス(ラップBook)を持っています。ObservableCollection<BookViewModel>インターフェイスの実装と同期されているがありますIBookService

では、質問です。次の UIを使用して、ユーザーが(ジャンルや著者ではなく) 書籍の 1 つを選択できるようにする必要があります。

UI

のフラットコレクションはBookViewModel、どういうわけか順番に「グループ化」する必要があります(または、正しく呼び出す方法がわかりません):

  1. ジャンル。
  2. 著者(選択したジャンル)。
  3. 本 (選択したジャンルと選択した著者)。

したがって、各レベルはその子孫レベルのマスターです。

また、前へ/次へのボタンについて言及することもできます。本のレベル(最後の本)をナビゲートする必要があります。たとえば、最後の本を選択して [次へ] を押すと (画像を参照)、UI の次の状態は次のようになります。 (第 2 のジャンルと第 2 の著者)。

このような複雑な UI を実現する方法: マルチレベルのグループ化? そのようなブック ブラウザを実装する最も簡単な方法は何ですか? 似たような例を教えていただければ幸いです。

4

1 に答える 1

0

彼はセルジュ、

IBookServiceを実装するSelectBookViewModelを1つ使用します。このViewModelはCollection<Book>またはを保持しObservableCollection<Book>ます。Book-Collectionを更新するUpdateEventを取得するたびに、このコレクションに対してLINQクエリを実行して、次のようなジャンルのリストを取得します。

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

最初のListViewをこれにバインドしますGenreListPropertySelectedItem最初のリストボックスのプロパティのChange-Eventsに応じて、同じスタイルで他のListViewのリストをクエリする他のロジックを実装します。

ボタンは、ListViewのナビゲーションと、SelectedItem変更時の更新ロジックを実行するだけです。[OK]ボタンを押すと、Book-CollectionでLINQクエリを組み合わせて実行し、処理を続行する選択されたクエリを選択します。

于 2012-07-03T20:54:08.933 に答える