0

我的 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");
};  
4

1 回答 1

0

你为什么需要它 ?EntityCollection 确实有这些方法 (Add,Remove...)
如果您在调用它们时遇到错误,可能会导致 Book 类未完全暴露给客户端( domainservice) 澄清一下,DomainCollectionView 旨在包装一个 EntityCollection,主要是为了更好地处理 MVVM 和一般绑定(请参阅此链接

于 2011-11-07T15:42:13.930 回答