有没有人试图实现以下场景?我希望了解有哪些解决方案可以实现这一目标。这已成为我们的用户真正的痛苦...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