Hi, I am having an issue with a standalone RadMultiColumnComboBox. It needs to be populated differently each time I select a different entity (User) from a RadGridView. As I understand it the only way to do this is with events.
The problem is that I run into an exception when I try to clear the selected items from the MCCB (basically, I need to reset it), and add the new selections. I get various ObservableCollection changed event exceptions.
What is the correct way to do this to avoid these type of exceptions?
Thanks,
Ian
Here is the code I use so far:
Private changingUser As Boolean = FalsePrivate Sub RadMultiColumnComboBox_SelectionChanged(sender As Object, e As SelectionChangeEventArgs) Try SyncLock lockObject If changingUser Then e.Handled = True changingUser = False Exit Sub End If End SyncLock If e.AddedItems.Count = 0 AndAlso e.RemovedItems.Count = 0 Then Exit Sub vm.AddRemoveRoles(e.AddedItems, e.RemovedItems) Catch ex As Exception Finally e.Handled = True End TryEnd SubPrivate Sub Grid_SelectionChanged(sender As Object, e As SelectionChangeEventArgs) Try SyncLock lockObject changingUser = True End SyncLock RolesBox.SelectedItems.SuspendNotifications() 'RolesBox is the RadMultiColumnComboBox RolesBox.SelectedItems.Clear() Dim roles = vm.GetSelectedUserRoles For Each r In roles RolesBox.SelectedItems.Add(r) Next Catch ex As Exception Finally RolesBox.SelectedItems.ResumeNotifications() SyncLock lockObject changingUser = False End SyncLock End TryEnd Sub
Here is an example of the exceptions I am getting:
System.InvalidOperationException:
'Cannot change ObservableCollection during a CollectionChanged event.'
at
System.Collections.ObjectModel.ObservableCollection`1.CheckReentrancy()
at
System.Collections.ObjectModel.ObservableCollection`1.RemoveItem(Int32 index)
at
System.Collections.ObjectModel.Collection`1.Remove(T item)
at
Telerik.Windows.Controls.RadMultiColumnComboBox.OnSelectedItemPropertyChanged(DependencyObject
d, DependencyPropertyChangedEventArgs args)
at
System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs
e)
at
System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs
e)
at
System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs
args)
at
System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex,
DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry,
EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean
coerceWithCurrentValue, OperationType operationType)
at
System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object
value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean
coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
at
System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
at
Telerik.Windows.Controls.MultiColumnComboBox.SelectionBridge.ItemsSelectedInOwner(IEnumerable`1
addedItems)
at
Telerik.Windows.Controls.MultiColumnComboBox.SelectionBridge.OwnerSelectedItemsCollectionChanged(Object
sender, NotifyCollectionChangedEventArgs e)
at
System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object
sender, NotifyCollectionChangedEventArgs e)
at
System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs
e)
at
System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 index, T
item)
