如何在viewmodel中封装模型并在datagrid中使用它?
问题描述:
我正在用MVVM开发一个wpf应用程序。如何在viewmodel中封装模型并在datagrid中使用它?
现在,我有我的模型实体,每个视图和当然视图一个viewmodel。
还有就是我的实体的例子:
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包装你的模型?和这种情况下特别。
答
最后,我发现一个简单的解决方案,基于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; }
}
这可能并不完美,但是这样可以避免我的解决方案过于复杂。
您可以简单地从模型类派生视图模型类。 – Clemens
谢谢你的回答,但我试过这种方式,我是这样的类:'class PersonViewModel:Person {}'和class GroupViewModel:Group {}'但我不得不隐藏Person的组属性GroupViewModel属性。 所以,我不确定这是最好的方式,或者我错了某处:) –
我无法看到图像,因为我在代理之后。如果从模型类派生组件类,然后公开视图模型中的组件集合以将它们绑定到视图中,会怎么样? – XAMlMAX