我在我的poco课程中有一个关联,例如:
public class Category() {
[Key]
public int id { get; set}
public string Name { get; set; }
/* HERE */
public virtual ICollection<Book> Books {get; set;}
}
public class Book() {
[Key]
public int id { get; set}
public string Name { get; set; }
}
我使用MVVM patern,MVVM Light和RIA Services Toolkit。我的域服务实现包含一个包含其书籍的方法GetCategories,例如:
public IQueriable<Category> GetCategories()
{
return Model.Categories.Include("Books").OrderBy(pCategory => pCategory.Name);
}
在我的ViewModel中,我有一个加载GetGruposQuery的DomainCollectionView。我还有一个绑定网格和其他控件的属性,如:
public ICollectionView CollectionViewCategories {
get { return myDomainCollectionViewCategories;}
}
我需要获取一个子属性CollectionView.Books来绑定我的控件和ADD,在视图中删除它,但是这个属性只是EntityCollection而不是包含ADD,REMOVE等方法的DomainCollectionView。
如何在ViewModel中将当前Books属性(CollectionViewCategories)作为DomainCollectionView获取?
谢谢!
我用以下方法解决了这个问题:( CollectionViewCategories.CurrentItem as Category).Books.Remove(CollectionViewBooks.CurrentItem as Book)
private ICollectionView CreateView(Object source)
{
CollectionViewSource cvs = new CollectionViewSource();
cvs.Source = source;
return cvs.View;
}
//...
//After CollectionViewCategories loaded:
CollectionViewCategories.CurrentChanged += (s, e) =>
{
if (CollectionViewCategories.CurrentItem != null)
{
CollectionViewBooks = CreateView(fContext.Categories.Where(p => p.Id == (CollectionViewCategories.CurrentItem as Category).Id).FirstOrDefault().Books);
}
else
{
CollectionViewBooks = null;
}
RaisePropertyChanged("CollectionViewBooks");
};
答案 0 :(得分:0)
你为什么需要它? EntityCollection确实有这些方法(添加,删除......)
如果在调用它们时遇到错误,可能会导致Book类未完全暴露给客户端(域服务上缺少insert / update / delete方法)
为了澄清一下,DomainCollectionView打算包装一个EntityCollection,主要是为了更好地处理MVVM和绑定(参见link)