2017-10-05 8 views
2

MVVMを使用してwpfアプリケーションを開発しています。ViewModelでモデルをラップし、DataGridで使用する方法は?

今のところ、モデルエンティティ、ビューごとに1つのビューモデル、およびコースビューがあります。

私のエンティティの例があります:

public class Group : INotifyPropertyChanged 
{ 
    public string GID { get; set; } 
    public string Label { get; set; } 
    public DateTime Date { get; set; } 
    public int Rank { get; set; } 
} 

public class Person : INotifyPropertyChanged 
{ 
    public string Name { get; set; } 
    public Group Group { get; set; } 
} 

(私は簡素化するための通知を削除)

現在、私はモデルのプロパティを繰り返し、中間クラスをthrought ViewModelに、いくつかを追加するために、私のモデルエンティティをマップにはその他。概要に:モデル< - >コンポーネント< - > viewmodel。しかし、これは私にとって無駄な複雑さを増やします。

さらに、私はデータグリッドに人のリストを表示する特別なケースがあります。あなたが見ることができるように

You can see here in excel

は、グループの列には、前のドロップダウンリストで選択したグループに基づいてフィルタリングされ、開始日と終了日とレベル]列によってフィルタリングドロップダウンです。

私の質問は次のとおりです。どのようにモデルをviewmodelでラップするのですか?そして、このケースに特化しています。

+0

単純に、モデルクラスからビューモデルクラスを派生させることができます。 – Clemens

+0

あなたの答えをありがとう、私はこのようにしてみました。クラスPersonViewModel:Person {} 'と' class GroupViewModel:Group {} 'ですが、Personのグループプロパティを非表示にする必要がありました。 GroupViewModelプロパティ。 私はそれが最善の方法か、おそらくどこかで間違っているとは確信していません:) –

+0

私はプロキシの背後にあるので、画像が見えません。モデルクラスからコンポーネントクラスを派生させ、ビューモデル内のコンポーネントコレクションを公開してビューにバインドするとどうなりますか? – XAMlMAX

答えて

1

最後に、私は同僚が私と共有しているthis articleに基づいて簡単な解決策を見つけました。

public class PersonViewModel(){ 
    public Person Person { get; set; } 
} 

public class MainViewModel(){ 
    public Club Club { get; set; } 
    public ObservableCollection<PersonViewModel> PersonViewModels { get; set;} 
    public PersonViewModel CurrentPersonViewModel { get; set; } 
} 

これはおそらく完璧ではありませんが、これは私のソリューションが複雑すぎることを避けます。

関連する問題