silverlight validation silverlight-4.0 inotifydataerrorinfo

silverlight - INotifyDataErrorInfo ArgumentOutOfRangeException al generar un evento ErrorsChanged



validation silverlight-4.0 (3)

Esta es una pregunta extraña y en este momento estoy pensando que puede tener algo que ver con la configuración de mi máquina.

Básicamente, he creado una implementación bastante estándar de INotifyDataErrorInfo y, en determinadas circunstancias, al generar el evento ErrorsChanged obtengo una ArgumentOutOfRangeException . Esta excepción no contiene mucha información; me da ArgumentOutOfRangeException crossed a native/managed boundary más la descripción estándar ArgumentOutOfRangeException respecto a los índices no negativos y los tamaños de colección. InnerException es nulo. El seguimiento de la pila es el siguiente:

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)

La razón por la que menciono la configuración de mi máquina es porque he intentado un par de soluciones publicadas en blogs (por ejemplo, aquí y aquí ) y tengo el mismo problema (es decir, no mi código, otra implementación de INotifyDataErrorInfo) y no hay mención en los comentarios de cualquier otro que tenga el problema que yo hago Google busca un par de hits aleatorios que no ayudan.

El estado requerido es el siguiente:

  1. Ingresé un valor en el control para que se active un error de validación. (Esto funciona bien, el texto de error se muestra en la interfaz de usuario como se esperaba).
  2. A continuación, ingreso un nuevo valor en el control para que la validación tenga éxito y se eliminen los errores de la colección de errores (HasErrors devuelve falso).
  3. ErrorsChanged se está planteando para reflejar este cambio a una validación exitosa sin errores, y se produce la excepción.

ACTUALIZACIÓN: también puedo reproducir si retiro el foco de un TextBox que muestra un error de validación.

Me pregunto si me he perdido un service pack / update o algo así porque, por lo que veo, parece que hay un error bastante elemental en el código del framework y, al mismo tiempo, no está sucediendo para los demás.

ACTUALIZACIÓN: Estoy usando la versión RTM final de Silverlight 4. NO es un RC o Beta.

ACTUALIZACIÓN: obtengo el mismo resultado con la muestra oficial de MS provista con este documento técnico .

ACTUALIZACIÓN: ahora he probado mi código y las muestras mencionadas en otra máquina y funciona bien. Realmente me gustaría resolver esto, ya que es un poco inquietante que no esté funcionando en mi máquina normal (que no he tenido ningún problema hasta ahora). Cualquier sugerencia sobre cómo podría rastrear qué está causando esto sería apreciada. He vuelto a instalar Silverlight (Runtime, SDK, Toolkit) en la máquina problema y esto no ha resuelto el problema.

ACTUALIZACIÓN: Aquí está la pila de llamadas del código de marco donde se produce la excepción obtenida habilitando el soporte del servidor de origen con el servidor de símbolos 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

ACTUALIZACIÓN: la aplicación funciona bien (en la máquina problema) sin un depurador conectado, funciona como se esperaba y no se invocan guiones de excepción no controlados (Esto me dejó perplejo, ¿podría estar relacionado con VS?). Hice una búsqueda rápida en Google para ver si podía encontrar algún archivo de registro de complemento de Silverlight que pudiera arrojar algo de luz aquí sin suerte, ¿existe tal registro?


Creo que es un error vinculante en la información sobre herramientas de la plantilla de TextBox

{Binding (Validation.Errors)[0].ErrorContent}

Validación. Los errores se vacían pero el enlace todavía no ha actualizado sus referencias.

Recomiendo ignorar la excepción. Desmarque "Interrumpir cuando las excepciones cruzan AppDomain o administrado ...." en Configuración de depuración.


Hay dos posibles excepciones diferentes que se lanzan desde el código nativo en esta situación. Ninguno es atrapado por un intento ... atrapar bloque, no importa lo que pongas (o no pongas) en la trampa.

Uno es "ArgumentOutOfRangeException cruzado un límite nativo / administrado". Para dejar de ver esto, debe desmarcar " Interrumpir cuando las excepciones cruzan el dominio de la aplicación o los límites administrados / nativos (solo administrados) " en Herramientas> Opciones> Depuración> General.

El otro es solo "ArgumentOutOfRangeException". Para dejar de ver este, debe marcar " Habilitar solo mi código " en Herramientas> Opciones> Depuración> General.


Pude solucionar este problema eliminando los enlaces de aplicaciones de Silverlight del proyecto web y volviéndolos a agregar.

Espero que esto ayude.