【发布时间】:2014-07-07 09:25:17
【问题描述】:
我在使用 WPFToolkit 的手风琴控件时遇到问题。该控件绑定到 ObservableCollection。当我尝试从集合初始化后添加的集合中删除项目时,我得到一个 ArgumentOutOfRangeException。仅当未选择该项目时才会发生这种情况。 这是我的代码:
private void AddNewReservation()
{
var res = new Reservation();
var rvm = new ReservationViewModel(res);
Reservations.Add(rvm);
rvm.DeleteCommand = new RelayCommand(
param => Reservations.Remove(rvm));
rvm.PropertyChanged += (sender, args) => SaveReservation(res, rvm);
}
我的目标是将包含空预订模型的 ReservationViewModel 添加到 ObesrvableCollection。只要模型/视图模型没有有效内容,就不应将其添加到存储库中。 那么我在这里做错了什么,或者这是 wpftoolkit 中的一个已知错误? 这是我的 StackTrace:
bei System.ThrowHelper.ThrowArgumentOutOfRangeException()
bei System.Collections.Generic.List`1.get_Item(Int32 index)
bei System.Collections.ObjectModel.Collection`1.System.Collections.IList.get_Item(Int32 index)
bei System.Windows.Data.ListCollectionView.InternalItemAt(Int32 index)
bei System.Windows.Data.ListCollectionView.GetItemAt(Int32 index)
bei System.Windows.Controls.ItemCollection.GetItemAt(Int32 index)
bei System.Windows.Controls.ItemCollection.get_Item(Int32 index)
bei System.Windows.Controls.Accordion.UnselectItem(Int32 index, Object item)
bei System.Windows.Controls.Accordion.ChangeSelectedIndex(Int32 oldIndex, Int32 newIndex)
bei System.Windows.Controls.Accordion.OnSelectedIndexPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
bei System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
bei System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
bei System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
bei System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
bei System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
bei System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
bei System.Windows.Controls.Accordion.set_SelectedIndex(Int32 value)
bei System.Windows.Controls.Accordion.OnItemsChanged(NotifyCollectionChangedEventArgs e)
bei System.Windows.Controls.ItemsControl.OnItemCollectionChanged2(Object sender, NotifyCollectionChangedEventArgs e)
bei System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)
bei System.Windows.Data.CollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
bei System.Windows.Controls.ItemCollection.OnViewCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
bei System.Windows.WeakEventManager.ListenerList`1.DeliverEvent(Object sender, EventArgs e, Type managerType)
bei System.Windows.WeakEventManager.DeliverEvent(Object sender, EventArgs args)
bei System.Collections.Specialized.CollectionChangedEventManager.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
bei System.Windows.Data.CollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
bei System.Windows.Data.ListCollectionView.ProcessCollectionChangedWithAdjustedIndex(NotifyCollectionChangedEventArgs args, Int32 adjustedOldIndex, Int32 adjustedNewIndex)
bei System.Windows.Data.ListCollectionView.ProcessCollectionChanged(NotifyCollectionChangedEventArgs args)
bei System.Windows.Data.CollectionView.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
bei System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
bei System.Collections.ObjectModel.ObservableCollection`1.RemoveItem(Int32 index)
bei System.Collections.ObjectModel.Collection`1.Remove(T item)
bei NORDWIND_RS.ViewModel.BookingViewModel.<>c__DisplayClass17.<AddNewReservation>b__15(Object param)
如果您有任何建议,我将不胜感激,
【问题讨论】:
-
使用相应的控件遇到同样的问题。我开始相信它有问题。就我而言,我可以删除直到最后一个项目的任何项目,但是如果我尝试从绑定集合中删除最后一个项目,则会抛出手风琴列表。
标签: c# accordion observablecollection wpftoolkit indexoutofboundsexception