实体框架4.0数据绑定与排序无法正常工作

Mik*_*tes 6 wpf entity-framework

我想做一些我认为非常简单的事情.我想将生成的Entity Framework EntityCollection绑定到WPF DataGrid.我也希望这个网格可以排序.

我尝试过各种各样的事情,包括使用CollectionViewSource.然而,似乎没有任何作用.在EntityCollection周围使用普通的CollectionViewSource给了我:

'System.Windows.Data.BindingListCollectionView' view does not support sorting.
Run Code Online (Sandbox Code Playgroud)

好吧......奇怪.我原以为这会起作用.接下来在CollectionViewSource上,我尝试设置:

 CollectionViewType="ListCollectionView"
Run Code Online (Sandbox Code Playgroud)

很好,排序现在有效.但是等等,我现在无法使用网格添加或删除实体,可能是因为ListCollectionView不支持实体框架上下文.

所以,我想我需要捕获来自datagrid的事件,以便从我的上下文中手动添加或删除实体.现在我找不到要捕获的事件来检测添加......!

为什么这么难?这应该是微软应该设计的标准"演示"案例.

有任何想法吗?

wpf*_*abe 2

BindingListCollectionView不是直接的问题。有关不支持排序的详细信息,请参阅“System.Windows.Data.BindingListCollectionView”视图不支持 Microsoft Connect 上的排序。

另一方面,ListCollectionView显然使用不同的技术支持排序。

我还尝试了以下代码,它运行得非常好。我基本上已经在代码中实现了其他帖子中的 XAML 。

 DatabaseContext.ObjectStateManager.ObjectStateManagerChanged += (o, args) => Debug.WriteLine(args.Element.ToString());

 var collectionViewSource = new CollectionViewSource();
 ((ISupportInitialize)collectionViewSource).BeginInit();
 collectionViewSource.CollectionViewType = typeof (ListCollectionView);
 collectionViewSource.Source = ((IListSource) DatabaseContext.Survey).GetList();
 collectionViewSource.SortDescriptions.Add(new SortDescription {PropertyName = "Name"});
 ((ISupportInitialize)collectionViewSource).EndInit();

 var editableCollectionView = (IEditableCollectionView)collectionViewSource.View;
 var survey = editableCollectionView.AddNew();

 // Before this point ObjectStateManager event has occurred and Debug Output is written to.

 editableCollectionView.CommitNew();
 DatabaseContext.SaveChanges(); // THIS WORKS TOO!
Run Code Online (Sandbox Code Playgroud)

我的DatabaseContext.Survey是一个ObjectQuery<Survey>. 您显示的是ObjectQueryLinq-to-EF 查询吗?前者显然对我有用。后者是我看到问题的地方。那不应该起作用。