У меня есть ассоциация в моем классе 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);
}
В моей модели представления у меня есть DomainCollectionView, который загружает GetGruposQuery.У меня также есть свойство для привязки сетки и других элементов управления, например:
public ICollectionView CollectionViewCategories {
get { return myDomainCollectionViewCategories;}
}
Мне нужно получить дочернее свойство CollectionView.Books для привязки моих элементов управления и ДОБАВИТЬ, УДАЛИТЬ itens в представлении, но это свойство толькоEntityCollection и не DomainCollectionView, который содержит методы для ADD, REMOVE и т.д.
Я решаю этот вопрос с помощью: (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");
};