我正在研究WPF MVVM
框架
我有ItemType
模型
public class ItemType
{
public long ItemTypeID { get; set; }
public long ItemCategoryID { get; set; }
public string Name { get; set; }
}
和其他ItemCategory
模型
public class ItemCategory
{
public long ItemCategoryID { get; set; }
public string Name { get; set; }
}
现在我想将ItemType
绑定到数据网格,但我不想显示ItemCategoryID
。我想展示ItemCategory.Name
如何在不改变原班级的情况下完成这项工作?
答案 0 :(得分:2)
这是MVVM使用ViewModel的原因。
不要修改Model,而是创建根据View需求构建的ViewModel类。那就是你要省去你不想要的财产。
修改强>
这是一种方法:
public class ItemTypeViewModel : INotifyPropertyChanged
{
private string _name;
public string Name
{
get { return _name; }
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged("Name");
}
}
}
private string category;
public string Category
{
get { return category; }
set
{
if (category != value)
{
category = value;
OnPropertyChanged("Category");
}
}
}
public static ItemTypeViewModel FromModel(ItemType model)
{
var itemTypeViewModel =
new ItemTypeViewModel
{
Name = model.Name,
Category = categories[model.CategoryID].Name;
};
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
var p = PropertyChanged;
if (p != null)
{
p(this, new PropertyChangedEventArgs(propertyName));
}
}
}
public class ItemTypesViewModel : ObservableCollection<ItemTypesViewModel>
{
private ObservableCollection<ItemTypeViewModel> _collection;
public ObservableCollection<ItemTypeViewModel> Collection
{
get { return _collection; }
set
{
if (_collection != value)
{
_collection = value;
OnPropertyChanged(new PropertyChangedEventArgs("Collection"));
}
}
}
}
使用静态方法为模型中的每个ItemType创建 将DataGrid绑定到集合。 我从ViewModel中删除了ItemType和ItemCategory之间模型中存在的关系。这只是处理这种结构的一种方式。相反,您也可以为ItemCategory创建一个ViewModel类,并在ItemTypeViewModel类中引用ItemCategoryViewModel类的实例。 请注意,这只是解决此问题的一种方法。您也可以通过其他方式解决此问题。另外:您还需要提供从ViewModel类到模型的转换。 最后一点建议:如果这是新的,你开始阅读/观看MVVM上的教程:https://stackoverflow.com/questions/2267903/learning-mvvm-for-wpf ItemTypeViewModel
的实例。将它们全部放在ItemTypeSViewModel
的
答案 1 :(得分:2)
两个人提供的答案完全有效,符合您的需求,就像我理解您的问题一样。基本思路是:
@Amani:
//check if the query fits your needs
var temp = from i in categoryList
from it in itemList
where i.ItemCategoryID == it.ItemCategoryID
select new { i, it };
进行交叉查询以生成新的组合类型,可以是
public class ItemTypeViewModel
{
public long ItemTypeID { get; set; }
public string ItemCategoryName { get; set; }
public string ItemTypeName { get; set; }
}
这是根据MVVM模式指南回复的@Erno。使用ItemTypeViewModel
对象的集合将它们绑定到您的视图。
希望这有帮助。
问候。
答案 2 :(得分:1)
如果这是您的数据库模型,您可以轻松地创建一个视图来连接这些表。或者您可以将以下代码用作模式:
var temp = from i in categoryList
from it in itemList
where i.ItemCategoryID == it.ItemCategoryID
select new { i, it };
希望得到这个帮助。