void ResetBindingList(IList list) { if (BindingListAllowItemMoving) { BindingList.Clear(); foreach (object item in list) { BindingList.Add(item); } } else { bool bindingListChanged = false; foreach (object item in new List <object>(BindingList.GetGenericEnumerable <object>())) { if (list.IndexOf(item) < 0) { bindingListChanged = true; BindingList.Remove(item); } } foreach (object item in list) { if (!BindingList.Contains(item)) { bindingListChanged = true; BindingList.Add(item); } } if (bindingListChanged) { bindingListChangingInProgress = false; if (BindingList is INotifyCollectionChanged) { OnCollectionChanged(BindingList, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); } else { if (BindingList is IBindingList) { OnBindingListListChanged(BindingList, new ListChangedEventArgs(ListChangedType.Reset, -1)); } } } } }