{"record":{"id":"29c6febd9d67dd9e","repo":"dotnet/wpf","slug":"sr-format-sr-membernotallowedduringaddoredit-groupbyselector","errorCode":null,"errorMessage":"SR.Format(SR.MemberNotAllowedDuringAddOrEdit, \"GroupBySelector\")","messagePattern":"SR\\.Format\\(SR\\.MemberNotAllowedDuringAddOrEdit, \"GroupBySelector\"\\)","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Data/BindingListCollectionView.cs","lineNumber":369,"sourceCode":"            get { return (_isGrouping) ? _group.Items : null; }\n        }\n\n        #endregion ICollectionView\n\n        /// <summary>\n        /// A delegate to select the group description as a function of the\n        /// parent group and its level.\n        /// </summary>\n        [DefaultValue(null)]\n        public GroupDescriptionSelectorCallback GroupBySelector\n        {\n            get { return _group.GroupBySelector; }\n            set\n            {\n                if (!CanGroup)\n                    throw new NotSupportedException();\n                if (IsAddingNew || IsEditingItem)\n                    throw new InvalidOperationException(SR.Format(SR.MemberNotAllowedDuringAddOrEdit, \"GroupBySelector\"));\n\n                _group.GroupBySelector = value;\n\n                RefreshOrDefer();\n            }\n        }\n\n        /// <summary>\n        /// Return the estimated number of records (or -1, meaning \"don't know\").\n        /// </summary>\n        public override int Count\n        {\n            get\n            {\n                VerifyRefreshNotDeferred();\n\n                return InternalCount;\n            }","sourceCodeStart":351,"sourceCodeEnd":387,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Data/BindingListCollectionView.cs#L351-L387","documentation":"The GroupBySelector setter throws InvalidOperationException when the view is inside an AddNew or EditItem transaction. Changing grouping (like filtering) during an uncommitted add/edit transaction is rejected with MemberNotAllowedDuringAddOrEdit naming 'GroupBySelector'.","triggerScenarios":"Assigning BindingListCollectionView.GroupBySelector while IsAddingNew or IsEditingItem is true — e.g. regrouping from a UI command while a DataGrid row is in add/edit mode.","commonSituations":"Dynamic grouping UI (combo box choosing group property) triggered while a row is being edited; automated tests that change grouping without committing pending transactions; refresh logic that reconfigures grouping on selection-changed events.","solutions":["Commit/cancel pending transactions first: CommitNew()/CancelNew() and CommitEdit()/CancelEdit() before setting GroupBySelector.","Guard the assignment with checks on IsAddingNew/IsEditingItem and defer until the transaction ends.","Configure grouping once when the view is created, before any user-driven add/edit activity."],"exampleFix":"// before\nview.GroupBySelector = mySelector; // throws during edit\n\n// after\nif (view.IsAddingNew) view.CommitNew();\nif (view.IsEditingItem) view.CommitEdit();\nview.GroupBySelector = mySelector;","handlingStrategy":"validation","validationCode":"if (view.IsAddingNew) view.CommitNew();\nif (view.IsEditingItem) view.CommitEdit();\nview.GroupBySelector = selector;","typeGuard":null,"tryCatchPattern":"try { view.GroupBySelector = selector; }\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"GroupBySelector\"))\n{\n    // retry after committing pending transactions\n}","preventionTips":["End add/edit transactions before regrouping","Guard grouping changes with IsAddingNew/IsEditingItem checks","Apply grouping configuration outside row-editing flows"],"tags":["wpf","collection-view","grouping","invalid-state"],"backgroundTag":"invalid-state-transition","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-21T21:30:21.729Z"}