簡體   English   中英

實體框架4.0數據綁定與排序無法正常工作

[英]Entity Framework 4.0 Databinding with sorting not working

我想做一些我認為非常簡單的事情。 我想將生成的Entity Framework EntityCollection綁定到WPF DataGrid。 我也希望這個網格可以排序。

我嘗試過各種各樣的事情,包括使用CollectionViewSource。 然而,似乎沒有任何作用。 在EntityCollection周圍使用普通的CollectionViewSource給了我:

'System.Windows.Data.BindingListCollectionView' view does not support sorting.

好吧......奇怪。 我原以為這會起作用。 接下來在CollectionViewSource上,我嘗試設置:

 CollectionViewType="ListCollectionView"

很好,排序現在有效。 但是等等,我現在無法使用網格添加或刪除實體,可能是因為ListCollectionView不支持實體框架上下文。

所以,我想我需要捕獲來自datagrid的事件,以便從我的上下文中手動添加或刪除實體。 現在我找不到要捕獲的事件來檢測添加......!

為什么這么難? 這應該是微軟應該設計的標准“演示”案例。

有任何想法嗎?

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!

我的DatabaseContext.Survey是一個ObjectQuery<Survey> 您是在顯示ObjectQuery還是Linq-to-EF查詢? 前者顯然對我有用。 后者是我看到問題的地方。 這不應該奏效。

看起來,當chages發生時,View才會收到通知。 所以,我只是這樣做

myCollectionViewSource.View.Refresh(); //refresh CollectionViewSource of CollectionViewType="ListCollectionView"

添加/刪除列表項后。

但隨后整個狀態會刷新(例如,您必須重新重置預先選擇的排序)。 如果符合您的需要,您需要檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM