我的 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 模式、MVVM Light 和 RIA 服务工具包。My Domain Service 实现包含一个 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、REMOVE 视图,但这个属性只是 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");
};