System.InvalidOperationException: ItemsControl несовместим с источником своих элементов - PullRequest
0 голосов
/ 28 августа 2018

Я получаю следующее исключение ниже

Что нужно знать:
-Я исследовал это исключение и обнаружил, что все ссылки на него касаются людей, использующих многопоточность ---- Я НЕ ИСПОЛЬЗУЮ THREADING, мое приложение простое ванильное однопоточное и линейное. - Предлагаемые ответы, которые я нашел, говорят, чтобы использовать методы Dispatcher и BeginInvoke (). Я не использую их. и они не имеют отношения к моему коду. -Я пользуюсь MVVM. в соответствии с ошибкой этот список объектов выдает ошибку в моей viewmodel

  private List<curve> curves{get;set;}

Это ошибка .net4.5? Что может быть причиной и как я могу это исправить?

Любая помощь приветствуется. Спасибо.

-------------------------- ИСКЛЮЧЕНИЕ / STACK TRACE ----------------- -----

System.InvalidOperationException: ItemsControl несовместим с источником предметов. Смотрите внутреннее исключение для получения дополнительной информации. ---> System.Exception: информация для разработчиков (используйте Text Visualizer для прочитай это): Это исключение было вызвано тем, что генератор для элемента управления 'System.Windows.Controls.DataGrid Items.Count: 0' с именем '(без имени)' получил последовательность событий CollectionChanged, которые не согласны с текущим состоянием коллекции предметов. Следующие Были выявлены различия: Накопленный счет 0 отличается от фактического счета 9. [Накопленный счет равен (Счет при последнем сбросе + #Adds - # Удаление после последний сброс).]

Один или несколько из следующих источников могли вызвать неправильные события: 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, версия = 1.24.0.20239, Культура = нейтральная, PublicKeyToken = null]] (помеченные источники считается более вероятной причиной проблемы.)

Наиболее распространенными причинами являются (а) изменение коллекции или ее количества без возбуждения соответствующего события, и (б) поднятие события с неверный индекс или параметр элемента.

Трассировка стека исключения описывает, как возникли несоответствия обнаружено, а не как они произошли. Чтобы получить более своевременное исключение, установите прикрепленное свойство 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 & computedUniformOrAverageContainerSize, Double & computedUniformOrAverageContainerPixelSize, Boolean & computedAreContainersUniformlySized, Boolean & hasAnyContainerSpanChanged, IList & items, Объект & item, IList & children, Int32 & childIndex, Boolean & visualOrderChanged, Boolean & isHor horizontal, Size & childConstraint, Rect & viewport, VirtualizationCacheLength & cacheSize, VirtualizationCacheLengthUnit & cacheUnit, Boolean & foundFirstItemInViewport, Double & firstItemInViewportOffset, Size & stackPixelSize, Size & stackPixelSizeInViewport, Size & stackPixelSizeInCacheBeforeViewport, Size & stackPixelSizeInCacheAfterViewport, Size & stackLogicalSize, Size & stackLogicalSizeInViewport, Size & stackLogicalSizeInCacheBeforeViewport, Size &stackLogicalSizeInCacheAfterViewport, Boolean & mustDisableVirtualization, логическое значение isBeforeFirstItem, логическое значение isAfterFirstItem, логическое значение isAfterLastItem, логическое значение skipActualMeasure, Boolean skipGeneration, Boolean & hasBringIntoViewContainerBeenMeasured, Boolean & hasVirtualizingChildren) в System.Windows.Controls.VirtualizingStackPanel.MeasureOverrideImpl (размер ограничение, Nullable 1& lastPageSafeOffset, List 1 & previousMeasuredOffsets, Nullable`1 & lastPagePixelSize, Boolean переиздание) в System.Windows.Controls.VirtualizingStackPanel.MeasureOverride (размер ограничение) в System.Windows.Controls.Primitives.DataGridRowsPresenter.MeasureOverride (размер ограничение) в System.Windows.FrameworkElement.MeasureCore (Размер availableSize) в System.Windows.UIElement.Measure (Размер availableSize) в System.Windows.ContextLayoutManager.UpdateLayout () в System.Windows.UIElement.UpdateLayout () в System.Windows.Controls.VirtualizingStackPanel. <> C__DisplayClass94_0.b__0 () в System.Windows.Threading.ExceptionWrapper.InternalRealCall (Делегат обратный вызов, объектные аргументы, Int32 numArgs) в System.Windows.Threading.ExceptionWrapper.TryCatchWhen (Источник объекта, Делегат обратного вызова, объектные аргументы, Int32 numArgs, делегат catchHandler)

1 Ответ

0 голосов
/ 28 августа 2018

Эта ошибка может возникать, если список источников где-то был изменен и данные, используемые в представлении, больше не соответствуют данным в списке. Да, это может легко произойти в потоках, но не требует потока, чтобы вызвать его.

Проблема связана, главным образом, с тем, что List не поддерживает INotifyPropertyChanged, поэтому пользовательский интерфейс не обновляется с изменениями. Вы можете определить свой curve класс для поддержки INotifyPropertyChanged или использовать класс, который уже обрабатывает его, например ObservableCollection.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...