INotifyDataErrorInfo ArgumentOutOfRangeException при возникновении события ErrorsChanged

Это странно, и на данный момент я думаю, что это может иметь какое-то отношение к конфигурации моих машин.

В основном я создал довольно стандартную реализациюINotifyDataErrorInfo и при определенных обстоятельствах, когда поднимаетErrorsChanged событие, которое я получаюArgumentOutOfRangeException, Это исключение не содержит много информации; это дает мнеArgumentOutOfRangeException crossed a native/managed boundary плюс стандартArgumentOutOfRangeException описание относительно неотрицательных индексов и размеров коллекции.InnerException нулевой. Трассировка стека выглядит следующим образом:

at System.ThrowHelper
        .ThrowArgumentOutOfRangeException(ExceptionArgument argument,
                                           ExceptionResource resource)
at System.ThrowHelper.ThrowArgumentOutOfRangeException()
at System.Collections.Generic.List`1.get_Item(Int32 index)
at System.Collections.ObjectModel.Collection`1.get_Item(Int32 index)
at System.Collections.ObjectModel.ReadOnlyCollection`1.get_Item(Int32 index)

Причина, по которой я упоминаю конфигурацию своего компьютера, заключается в том, что я попробовал несколько решений, опубликованных в блогах (например,Вот а такжеВот) и получить ту же проблему (то есть не мой код, а другую реализацию INotifyDataErrorInfo), и в комментариях нет упоминаний о других проблемах, с которыми я сталкиваюсь. Поиск в Google дает пару случайных попаданий, которые не помогают.

Требуемое состояние следующее:

Я ввел значение в элемент управления таким образом, что возникает ошибка проверки. (Это работает нормально, текст ошибки отображается в пользовательском интерфейсе, как и ожидалось).Затем я ввожу новое значение в элемент управления, чтобы проверка прошла успешно и ошибки были удалены из коллекции ошибок (HasErrors возвращает false).ErrorsChanged поднимается, чтобы отразить это изменение для успешной проверки без ошибок, и возникает исключение.

ОБНОВИТЬ: Я также могу воспроизвести, если переместить фокус с TextBox с ошибкой проверки.

Мне немного интересно, пропустил ли я пакет обновления / обновления или что-то еще, потому что из того, что я вижу, выглядит, как будто в коде фреймворка есть довольно элементарная ошибка, и в то же время ее не происходит для других.

ОБНОВЛЕНИЕ: я использую окончательный RTM-сборку Silverlight 4. НЕ RC или бета-версия.

ОБНОВИТЬ: Я получаю тот же результат с официальным образцом MS, предоставленным сэтот технический документ.

ОБНОВИТЬ: Теперь я проверил мой код и упомянутые примеры на другом компьютере, и он работает нормально. Я все еще очень хотел бы решить эту проблему, так как немного тревожит, что она не работает на моей обычной машине (с которой у меня до сих пор не было проблем). Будем благодарны за любые предложения относительно того, как я могу отследить, что является причиной этого. Я переустановил Silverlight (Runtime, SDK, Toolkit) на проблемной машине, и это не решило проблему.

ОБНОВИТЬ: Вот стек вызовов кода платформы, в котором происходит исключение, полученный путем включения поддержки исходного сервера с помощью сервера символов MS:

mscorlib.dll!System.ThrowHelper.ThrowArgumentOutOfRangeException(System.ExceptionArgument argument, System.ExceptionResource resource) + 0x40 bytes 
  mscorlib.dll!System.ThrowHelper.ThrowArgumentOutOfRangeException() + 0x10 bytes 
  mscorlib.dll!System.Collections.Generic.List<System.Windows.Controls.ValidationError>.this[int].get(int index = 0) + 0x13 bytes 
  mscorlib.dll!System.Collections.ObjectModel.Collection<System.Windows.Controls.ValidationError>.this[int].get(int index) + 0x2e bytes 
  mscorlib.dll!System.Collections.ObjectModel.ReadOnlyCollection<System.Windows.Controls.ValidationError>.this[int].get(int index) + 0x2e bytes 
  [Native to Managed Transition] 
  [Managed to Native Transition] 
  System.Windows.dll!System.Windows.IndexerListener.Value.get() + 0xc3 bytes 
  System.Windows.dll!System.Windows.IndexerPathStep.Value.get() + 0x17 bytes 
  System.Windows.dll!System.Windows.PropertyPathListener.RaisePropertyPathStepChanged(System.Windows.PropertyPathStep source = {System.Windows.IndexerPathStep}) + 0x17 bytes 
  System.Windows.dll!System.Windows.IndexerPathStep.RaisePropertyPathStepChanged(System.Windows.PropertyListener source) + 0xe bytes 
  System.Windows.dll!System.Windows.IndexerListener.SourcePropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs args) + 0xea bytes 
  System.Windows.dll!System.Windows.Data.WeakPropertyChangedListener.PropertyChangedCallback(object sender, System.ComponentModel.PropertyChangedEventArgs args) + 0x3d bytes 
  System.Windows.dll!System.Collections.ObjectModel.ReadOnlyObservableCollection<System.__Canon>.OnPropertyChanged(System.ComponentModel.PropertyChangedEventArgs args) + 0x17 bytes 
  System.Windows.dll!System.Collections.ObjectModel.ReadOnlyObservableCollection<System.__Canon>.HandlePropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + 0xe bytes 
  System.Windows.dll!System.Collections.ObjectModel.ObservableCollection<System.Windows.Controls.ValidationError>.OnPropertyChanged(System.ComponentModel.PropertyChangedEventArgs e) + 0x37 bytes 
  System.Windows.dll!System.Collections.ObjectModel.ObservableCollection<System.Windows.Controls.ValidationError>.RemoveItem(int index = 0) + 0x79 bytes 
  mscorlib.dll!System.Collections.ObjectModel.Collection<System.Windows.Controls.ValidationError>.Remove(System.Windows.Controls.ValidationError item) + 0x75 bytes 
  System.Windows.dll!System.Windows.Controls.Validation.RemoveValidationError(System.Windows.FrameworkElement fe = {System.Windows.Controls.TextBox}, System.Windows.Controls.ValidationError error) + 0x40 bytes 
  System.Windows.dll!System.Windows.Data.BindingExpression.RemoveErrorFromTarget(System.Windows.Controls.ValidationError error) + 0x48 bytes 
  System.Windows.dll!System.Windows.Data.BindingExpression.NotifyOldDataErrorInfos(System.Collections.ObjectModel.Collection<System.Windows.Controls.ValidationError> validationErrors) + 0x73 bytes 
  System.Windows.dll!System.Windows.Data.BindingExpression.NotifyOldDataErrorInfos(bool isNotifyChildDataErrorInfo) + 0x25 bytes 
  System.Windows.dll!System.Windows.Data.BindingExpression.NotifyDataErrorInfo_ErrorsChanged(object sender, System.ComponentModel.DataErrorsChangedEventArgs e) + 0xad bytes 

ОБНОВИТЬ: Приложение работает нормально (на проблемном компьютере) без подключенного отладчика, работает как положено, и не запускаются сценарии необработанных исключений (это меня как-то озадачило, может ли это быть связано с VS?). У меня был быстрый поиск в Google, чтобы увидеть, смогу ли я найти какой-нибудь файл журнала плагина Silverlight, который может пролить свет здесь без удачи, есть ли такой журнал?

Ответы на вопрос(3)

Ваш ответ на вопрос