有沒有人試圖實現以下場景?我希望瞭解有哪些解決方案可以實現這一目標。這已成爲我們的用戶真正的痛苦...WPF DataGrid - 在編輯行時禁用排序和篩選?
我們有一個WPF DataGrid,使用戶能夠根據列(其中Column = Value或開始,結束,包含等)篩選其數據行等等)。他們還可以通過單擊其中一個Column標題對數據進行排序,或者我們還爲它們提供了一個排序窗口,可以在其中添加多個列,併爲每列選擇升序/降序(僅適用於每個列的「SortDirection」屬性他們選擇,它似乎也與SortDescriptions一起使用「CollectionView」)。
問題是當用戶正在編輯數據並應用「過濾器」或「排序」(或兩者)時,如果用戶在其中一個過濾/排序的列上編輯值,該行將「移動」並隨同它一起移動光標。如果新值是「已過濾」的值,那麼該行將完全消失(因爲用戶應用了「過濾」,因此它應該完全消失)。
他們希望無論是兩件事情之一,而不是發生:
1 - 來吧,自動排序和過濾後的每個細胞被改變,如果行「動作」,將光標移動到下一行(相同的單元格),而不是該行跟隨其新定義的光標(並且可能將當前可查看的數據行滾動到屏幕外)。
2 - 只要編輯一行,禁用所有的排序和過濾,直到用戶單擊「保存」或「刷新」(或其他選項)?
我也可以看到我們可能採取一種方法進行過濾,另一種方法進行排序。
有沒有人有更好的主意或對如何實現這一點有任何想法?我有兩個想法(例如,要禁用排序:在我的CellEditEnding事件處理程序中,我可以存儲用戶排序選項,從每列中清除它們,然後在用戶單擊保存/重置時重新應用它們或也許我可以處理「Sorting」事件,並在編輯數據時將「e.handled」設置爲true ??)。我只是對WPF和DataGrid很陌生,我想知道是否可能有一個「最佳做法」,或者我沒有找到的屬性,如「DisableSorting = true/false」(lol)。
想法?意見?
您是如何在編輯一行時設法更改過濾器的?由於編輯在控件丟失焦點時完成,並且CollectionView出現錯誤「AddNew或EditItem期間不允許使用」篩選「」。 – vorrtex 2011-03-08 20:39:29
我想過綁定到DataGridRow類的IsEditing屬性,但是Filter屬性不允許測試您的場景。 – vorrtex 2011-03-08 20:41:38
我沒有。我只是說這是一個「主意」。 :)我沒有看到一個簡單的解決方案。也許重寫實際排序的DataGrid方法?我似乎無法找到它。有一個「排序」方法,但點擊列時只會觸發它。實際的「排序」是什麼方法? – Shayne 2011-03-08 22:12:15