C# 如何判断ICollectionView当前是否可过滤?
我正在将C# 如何判断ICollectionView当前是否可过滤?,c#,wpf,datagrid,filter,icollectionview,C#,Wpf,Datagrid,Filter,Icollectionview,我正在将DataGrid的ItemsSource属性绑定到我的ViewModel中的属性。然后,我创建了一个ICollectionView,并使用DataGrid的项目源创建了一个默认视图,如下所示: \u displayItemsView=CollectionViewSource.GetDefaultView(\u displayItems) 其中,\u displayItems是一个列表,\u displayItemsView是一个ICollectionView 现在我遇到的问题是,我允许用
DataGrid
的ItemsSource
属性绑定到我的ViewModel中的属性。然后,我创建了一个ICollectionView
,并使用DataGrid
的项目源创建了一个默认视图,如下所示:
\u displayItemsView=CollectionViewSource.GetDefaultView(\u displayItems)代码>
其中,\u displayItems
是一个列表,\u displayItemsView
是一个ICollectionView
现在我遇到的问题是,我允许用户像这样过滤数据网格:
_displayItemsView.Filter = delegate(object item)
{
DISPLAY_ITEM displayItem = (DISPLAY_ITEM)item;
if ((displayItem.RETAIL_ITEM_DPCI.ToString().ToUpper().Contains(value.ToUpper()))
.
.
.
这在大多数情况下都非常有效,但是如果用户当前正在编辑或添加DataGrid
中的一行,则ICollectionView
会引发一个未处理的异常。我应该如何检测以下情况之一:
DataGrid
当前正在修改或删除
ICollectionView
未处于要筛选的状态
感谢您的指导,我愿意接受您的建议。谢谢 对于问题1,WPF DataGrid具有可用的事务语义。如果绑定集合中的对象实现了IEditableObject
,则代码将收到三个通知:开始编辑、结束编辑和取消编辑。您可以跟踪这些通知,并实现一些内务管理代码来判断是否正在修改DataGrid。根据您的设计,您需要将DataGrid的SelectionUnit
/SelectionMode
属性设置为与所需的通知一致
对于问题2,当基础集合从IList继承时(例如,ObservableCollection
),您可以通过强制转换CollectionViewSource.GetDefaultView
获得ListCollectionView
)
ListCollectionView
上有几个属性,可以为您提供所需的信息
CurrentEditItem
和CurrentAddItem
将指向各自的
当这些状态处于活动状态时
IsAddingNew
将告诉您是否正在进行添加事务
IsEditingItem
将告诉您是否正在进行编辑交易
IsInUse
将显示当前是否有订户
使用这些属性和IEditableObject接口将为您提供避免出现异常所需的所有信息。对于您的问题1,WPF DataGrid具有可用的事务语义。如果绑定集合中的对象实现了IEditableObject
,则代码将收到三个通知:开始编辑、结束编辑和取消编辑。您可以跟踪这些通知,并实现一些内务管理代码来判断是否正在修改DataGrid。根据您的设计,您需要将DataGrid的SelectionUnit
/SelectionMode
属性设置为与所需的通知一致
对于问题2,当基础集合从IList继承时(例如,ObservableCollection
),您可以通过强制转换CollectionViewSource.GetDefaultView
获得ListCollectionView
)
ListCollectionView
上有几个属性,可以为您提供所需的信息
CurrentEditItem
和CurrentAddItem
将指向各自的
当这些状态处于活动状态时
IsAddingNew
将告诉您是否正在进行添加事务
IsEditingItem
将告诉您是否正在进行编辑交易
IsInUse
将显示当前是否有订户
使用这些属性和IEditableObject接口将为您提供避免出现异常所需的所有信息。异常上会有一个message属性。消息中有什么?@GarryPass消息是“'Filter'在AddNew或EditItem事务期间是不允许的。”异常将具有消息属性。消息中有什么?@GarryPass消息是“'Filter'在AddNew或EditItem事务期间不允许。”