0

私のポコクラスには協会があります。例:

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、RIAServicesToolkitを使用しています。私のドメインサービスの実装には、本を含むGetCategoriesメソッドが含まれています。例:

public IQueriable<Category> GetCategories()
{
    return Model.Categories.Include("Books").OrderBy(pCategory => pCategory.Name);
}

私のViewModelには、GetGruposQueryをロードするDomainCollectionViewがあります。グリッドやその他のコントロールをバインドするためのプロパティもあります。

public ICollectionView CollectionViewCategories {
    get { return myDomainCollectionViewCategories;}
}

コントロールとADD、REMOVE itensをビューにバインドするための子プロパティCollectionView.Booksを取得する必要がありますが、このプロパティはEntityCollectionのみであり、ADD、REMOVEなどのメソッドを含むDomainCollectionViewではありません。

ViewModelで(CollectionViewCategoriesの)現在のBooksプロパティを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は、主にMVVMとバインディング全般をより適切に処理するためにEntityCollectionをラップすることを目的としています(このリンクを参照)

于 2011-11-07T15:42:13.930 に答える