3

コレクションを含む必要があるモデルがある場合 (例: 本 -> 著者)

私はそれをどのように行うか

お気に入り:

public class Book
{
    public string Title { get; set; }
    public List<Author> Authors { get; set; }
}

以上のような:

public class Book
{
    public string Title { get; set; }
    public List<AuthorViewModel> Authors { get; set; }
}

これを行うためのより一般的な方法と、ViewModel からビューを取得するにはどうすればよいですか?

4

3 に答える 3

4

これは間違いなく間違っています:

public class Book
{
    public string Title { get; set; }
    public List<AuthorViewModel> Authors { get; set; }
}

しかし、これは問題ありません:

public class BookViewModel
{
    public string Title { get; set; }
    public List<AuthorViewModel> AuthorModels { get; set; }
}
于 2012-10-22T17:10:55.567 に答える
1

MV-VM によると、下位レベルは上位レベルについて認識すべきではありません。ビューは、ViewModel を認識し、そのプロパティにデータバインドします。ViewModel はモデルを認識していますが (それに関連するプロパティを公開しています)、ビューについては認識していません。

同様に、Model は ViewModel について知りません。したがって、aBookAuthorsを持っていますが、a は s 、 sBookViewModelについて知ることができ、(メディエーターを介して) s を呼び出すことさえできる場合があります。しかし、まったく知らないはずです。BookAuthorAuthorViewModelBookViewModel

h番目

于 2012-10-22T11:48:48.467 に答える
0

ビューをレンダリングするのに十分なプロパティがモデルに含まれているかどうかによって異なります。ビュー固有のコードでそれらを拡張する必要があり、これらの追加プロパティでモデルを汚染したくない場合は、ビュー モデルを作成します。

Book必要に応じて、モデル ( )をビュー モデル ( ) のプロパティとして公開できBookViewModelますが、純粋主義者は、モデル プロパティごとにモデルに委譲するラッパー プロパティを作成する必要があると言うでしょう。

「ビュー モデルからビューを取得する方法」の意味がわかりませんが、MVVM デザイン パターンを使用している場合は、MVVM フレームワークを使用する必要があります。たとえば、Caliburn.Microでは、最初にビュー モデルを使用する場合、ビュー モデルをインスタンス化し、Caliburn.Micro を使用してビューを見つけ、2 つをバインドします。

于 2012-10-22T11:43:33.263 に答える