C# 如何在viewmodel中包装模型并在datagrid中使用它?

C# 如何在viewmodel中包装模型并在datagrid中使用它?,c#,wpf,mvvm,C#,Wpf,Mvvm,我正在用MVVM开发一个wpf应用程序 现在,我有我的模型实体,每个视图一个视图模型,当然还有视图 以下是我的实体的例子: public class Group : INotifyPropertyChanged { public string GID { get; set; } public string Label { get; set; } public DateTime Date { get; set; } public int Rank { get; se

我正在用MVVM开发一个wpf应用程序

现在,我有我的模型实体,每个视图一个视图模型,当然还有视图

以下是我的实体的例子:

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; }
}
(我删除了通知以简化)

目前,我通过一个中间类将模型实体映射到viewmodel,该中间类重复模型的属性并添加一些其他属性。总结:模型组件视图模型。但这给我增加了更多无用的复杂性

此外,我还有一个特例,我想在数据网格中显示一个人员列表

如您所见,“组”列是一个按开始日期和结束日期过滤的下拉列表,而“级别”列是根据上一个下拉列表中选定的组过滤的


所以,我的问题是:如何按viewmodel包装模型?特别是在这个案例中。

最后,我找到了一个基于我同事与我分享的简单解决方案

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; }
}
公共类PersonViewModel(){
公众人物{get;set;}
}
公共类MainViewModel(){
公共俱乐部{get;set;}
公共ObservableCollection PersonViewModels{get;set;}
公共PersonViewModel CurrentPersonViewModel{get;set;}
}

这也许并不完美,但这可以避免我的解决方案过于复杂

您可以简单地从模型类派生视图模型类。谢谢您的回答,但是我尝试了这种方法,并且我使用了这种类:
类PersonViewModel:Person{}
类GroupViewModel:Group{}
,但是我必须隐藏Person的Group属性才能拥有ViewGroupModel属性。所以,我不确定这是最好的方法,或者我在某个地方错了:)我看不到图像,因为我在代理后面。如果您从模型类派生组件类,然后公开viewmodel中的组件集合以将它们绑定到视图中,会怎么样?在我看来,您就像是在做xD一样,但是我找到了一个更简单的解决方案。我创建了一个viewmodel
classpersonviewmodel{}
,它包装了视图所需的模型
classperson{}
+属性。我的“MainViewModel”包装了一组“PersonViewModel”以绑定到数据网格。这样可以避免创建组件。我是根据一位同事与我分享的信息来做这件事的。