2016-08-08 7 views
0

以前はWPFまたはMVVMパターンで作業していませんでした。
しかし、私は単純な文書管理システムを作成したいと思いますし、上記の技術を使用してそうしたいと思います。WPFツリービューでMVVMを実装する方法は?

私はデータベース内に階層ファイルシステムをモデル化し、それをツリービューで表示したいと考えています。
EER-Diagramm
各ディレクトリには複数のサブディレクトリと複数のファイルが存在することがわかります。

トピックに関するチュートリアルを読みましたが、正しく理解していれば、データベースのデータを直接格納するディレクトリとファイルのモデルクラスを作成する必要があります。
例:

public class Directory 
{ 
    private int id; 
    public int Id 
    { 
     get { return id; } 
     set { id = value; } 
    } 

    private string name; 
    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    private int parent; 
    public int Parent 
    { 
     get { return parent; } 
     set { parent = value; } 
    } 

    private DateTime dateCreatedOn; 
    public DateTime DateCreatedOn 
    { 
     get { return dateCreatedOn; } 
     set { dateCreatedOn = value; } 
    } 
} 

次に、各モデルのクラスは、このクラスのオブジェクトを結合するためのUI要素を説明するためにのみ関連する追加のプロパティを実装して関連するビューモデルのクラスを有していなければなりません。
この場合、ビューモデルクラスはtreeviewitemのisExpandedプロパティとisSelectedプロパティを持つ必要があります。
次に、表示されるべきディレクトリとファイルのコレクションを含むツリービュー全体の別のビューモデルクラスが必要になります。

私の質問は以下のとおりです。

  1. は私が正しくMVVMの概念を理解したことがありますか?
  2. ディレクトリのモデルまたはビューモデルのどのクラスがiNotifyPropertyChangedインターフェイスを実装する必要がありますか?
  3. ディレクトリのビュー・モデル・クラスには、モデル・クラスと同じプロパティが含まれているか、ビュー・モデル・クラスのモデル・オブジェクトへの参照で十分ですか?
  4. ビューモデルクラスにモデルクラスの同じプロパティを再度含める必要がある場合は、モデルオブジェクトと関連するビューモデルオブジェクトが常に同期した状態に保たれるようにするにはどうすればよいでしょうか?

私はこの質問が理解可能であり、すべての助けに感謝したいと思います。 アンナハリ

+0

質問2-4は、必ず個別に質問されています。 –

+0

HierarchicalDataTemplate – Will

答えて

0

答え1)はい。

答え2)view-modelにはiNotifyPropertyChangedが必要です。

答え3)はい。明示的にマッピングする必要があります。すなわち:

this.property1 = model.property1 

答え4)と同じ名前を使用して、ビュー・モデルにおける官民財産のペアを使用している場合は、ビュー・モデルにINotifyPropertyChangedのを使用3.

の回答を参照し、モデルのプロパティをビューモデルの対応するプロパティにマップする場合は、設定する必要があります。

0

モデルでもiNotifyPropertyChangedを実装できます。ビューモデルでプロパティを再度繰り返す必要はありません。

https://msdn.microsoft.com/en-us/library/gg405484(PandP.40).aspx

「モデルもIDataErrorInfo(又はINotifyDataErrorInfo)を通じて報告インターフェースをデータ検証し、エラーをサポートすることができる。IDataErrorInfoとINotifyDataErrorInfoインターフェイスはWPFデータはUIができるように値が変更されたときに通知されるように結合可能また、UIレイヤーでのデータ検証やエラー報告のサポートも可能になりました。

関連する問題