我在下面得到了以下异常
须知:
-我研究了此异常,发现对该异常的所有引用都涉及使用线程的人员-我不使用线程,我的应用程序是普通的单线程和线性线程。
-我发现的建议答案是使用Dispatcher和BeginInvoke()方法。我没有使用那些。它们与我的代码无关。
-我使用MVVM。根据错误,该对象列表在我的视图模型中引发了错误
private List<curve> curves{get;set;}
这是.net4.5错误吗?可能是什么原因造成的,我该如何解决?
感谢您的帮助。谢谢。
--------------------------例外/堆栈跟踪----------------- -----
System.InvalidOperationException:ItemsControl不一致 及其项目来源。 有关更多信息,请参见内部异常。 ---> System.Exception:开发人员信息(使用Text Visualizer可以 读这个): 引发此异常是因为名称为'(unnamed)'的控件'System.Windows.Controls.DataGrid Items.Count:0'的生成器 收到了不同的CollectionChanged事件序列 具有Items集合的当前状态。下列 检测到差异: 累计计数0与实际计数9不同。[累计计数为(最后一次复位时的计数+ #Adds-#Remove自 最后一次重置)。]
以下一个或多个来源可能引发了错误的事件: System.Windows.Controls.ItemContainerGenerator System.Windows.Controls.ItemCollection System.Windows.Data.ListCollectionView System.Collections.Generic.List`1 [[AI.ClientHousingUtilities.Module.Models.curve, AI.ClientHousingUtilities.Module,Version = 1.24.0.20239, Culture = neutral,PublicKeyToken = null]](加星标的来源是 被认为更可能是造成问题的原因。)
最常见的原因是(a)更改集合或其计数 而没有引发相应的事件,并且(b)与 错误的索引或项目参数。
异常的堆栈跟踪描述了不一致的情况 检测到,而不是如何发生。要获取更及时的异常,请设置 附加属性“ PresentationTraceSources.TraceLevel” 生成器将值设置为“高”并重新运行场景。一种方法 是要运行类似于以下命令:
System.Diagnostics.PresentationTraceSources.SetTraceLevel(myItemsControl.ItemContainerGenerator, 立即发送的System.Diagnostics.PresentationTraceLevel.High) 窗口。这导致检测逻辑在每次 CollectionChanged事件,因此它将降低应用程序的速度。---内部异常堆栈跟踪的结尾--- System.Windows.Controls.ItemContainerGenerator.Verify()在 System.Windows.Controls.VirtualizingStackPanel.MeasureChild(IItemContainerGenerator& 生成器,IContainItemStorage&itemStorageProvider, IContainItemStorage&parentItemStorageProvider,Object&parentItem, Boolean&hasUniformOrAverageContainerSizeBeenSet,Double& 计算出的UniformOrAverageContainerSize,Double& 计算的UniformOrAverageContainerPixelSize,布尔值和 computeAreContainersUniformlySized,Boolean& hasAnyContainerSpanChanged,IList&项目,Object&项目,IList& children,Int32&childIndex,Boolean&visualOrderChanged,Boolean& isHorizontal,Size&childConstraint,Rect&视口, VirtualizationCacheLength&cacheSize,VirtualizationCacheLengthUnit& cacheUnit,Boolean和foundFirstItemInViewport,Double& firstItemInViewportOffset,Size&stackPixelSize,Size& stackPixelSizeInViewport,Size&stackPixelSizeInCacheBeforeViewport, Size&stackPixelSizeInCacheAfterViewport,Size&stackLogicalSize, Size&stackLogicalSizeInViewport,Size& stackLogicalSizeInCacheBeforeViewport,Size& stackLogicalSizeInCacheAfterViewport,布尔值和 mustDisableVirtualization,布尔值为isBeforeFirstItem,布尔 isAfterFirstItem,布尔值isAfterLastItem,布尔值skipActualMeasure, 布尔skipGeneration,布尔& hasBringIntoViewContainerBeenMeasured,布尔值和 hasVirtualizingChildren) System.Windows.Controls.VirtualizingStackPanel.MeasureOverrideImpl(大小 约束,可为空
1& lastPageSafeOffset, List
1& previousMeasuredOffsets,可为空1和lastPagePixelSize,布尔值 重新测量) System.Windows.Controls.VirtualizingStackPanel.MeasureOverride(大小 约束) System.Windows.Controls.Primitives.DataGridRowsPresenter.MeasureOverride(大小 约束)在System.Windows.FrameworkElement.MeasureCore(Size 位于System.Windows.UIElement.Measure(Size的availableSize) availableSize)位于 System.Windows.ContextLayoutManager.UpdateLayout()位于 System.Windows.UIElement.UpdateLayout()在 System.Windows.Controls.VirtualizingStackPanel。<> c__DisplayClass94_0.b__0() 在System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate 回调,对象参数,Int32 numArgs) System.Windows.Threading.ExceptionWrapper.TryCatchWhen(对象源, 委托回调,对象args,Int32 numArgs,委托catchHandler)
答案 0 :(得分:1)
如果在某处修改了源列表,并且“视图”中使用的数据不再与列表中的数据匹配,则会发生此错误。是的,这很容易在线程中发生,但不需要线程引起。
问题主要是由于List不支持INotifyPropertyChanged,因此UI不会随着更改而保持更新。您可以定义您的curve
类以支持INotifyPropertyChanged或使用已经处理过的类,例如ObservableCollection。