Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何判断ICollectionView当前是否可过滤?_C#_Wpf_Datagrid_Filter_Icollectionview - Fatal编程技术网

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事务期间不允许。”