2011-10-06 21 views
0

它看起來應該很簡單,但我顯然太密集以至於無法解決這個問題。我使用一個簡單的ObjectQuery獲得一個ObjectResult;它只是數據表中的幾條記錄。我將它分配給一個CollectionViewSource Source屬性。然後我看看CollectionView的View屬性,看看CanFilterCanSor都是假的。當我得到DefaultView作爲BindingListCollectionView時,它顯示CanCustomFilter是錯誤的。由於這些是隻讀的,我無法更改這些值。現在我想對檢索到的數據設置一個過濾器(或排序),而不用返回SQL Server,但是對於我來說,我無法找到一種將這些屬性的數據設置爲true的方法。如何使ObjectResult可過濾

我嘗試使用ObjectResult.AsQueryable<T>()和結果是否有CanFilterCanSort真實的,但改變從System.Windows.Data.BindingListCollectionView視圖類型爲MS.Internal.Data.EnumerableCollectionView,我無法找到一個方法來施放EnumerableCollectionView回一個BindingListCollectionView

任何指針將不勝感激。

+0

您不能過濾或排序'ObjectResult'。這是不可能的,因爲'ObjectResult'只能被讀取一次,所以如果你第一次渲染結果被讀取,並且任何其他綁定重新讀取的操作都會失敗。 –

回答

0

我認爲這種偏差的主要原因是BindingListCollectionView無法過濾或排序任何IQueryable對象(不知道爲什麼),儘管執行查詢設置Source property。最簡單的方法是使用ToList<T>()方法,它執行查詢,但形成List<T>可以排序和過濾BindingListCollectionView

+0

謝謝,ASpirin,確實有效。但是,一旦源綁定到ToList ()的結果,它現在是ListCollectionView,而不是BindingListCollectionView,因此必須採取適當的過濾方法,即設置view.Filter = new謂詞(),並且CustomFilter及其語法無法使用。所以雖然這是一個解決方法,但它並不回答我的問題。順便說一句,在另一個控件中(這些是在組合框中),我使用了一個StyleSelector來完成過濾 - 另一個解決方法,但不是我想要做的。 –

+0

爲什麼你設置爲過濾空謂詞?附: ListCollectionView實現與BindingListCollectionView和IEditableCollectionViewAddNewItem相同的接口 – ASpirin

+0

我沒有使用空的過濾器謂詞;我只是表明我必須使用該過濾器表單(語法)。實際條目是viewType.Filter = new謂詞(filter.FilterSubmittalType); –