Esto es extraño y en este momento estoy pensando que puede tener algo que ver con la configuración de mi máquina.INotifyDataErrorInfo ArgumentOutOfRangeException al generar el evento ErrorsChanged
Básicamente he creado una implementación bastante estándar de INotifyDataErrorInfo
y, en ciertas circunstancias, al generar el evento ErrorsChanged
obtengo un 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
con respecto a índices no negativos y tamaños de colección. El 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 que menciono mi configuración de la máquina se debe a que he intentado un par de soluciones publicado a los blogs (por ejemplo here y here) y obtener el mismo problema (es decir, no mi código, otra implementación de INotifyDataErrorInfo) y no hay mención en los comentarios de ningún otro que tenga el problema que tengo. Google busca un par de hits aleatorios que no ayudan.
El estado requerido es el siguiente:
- que han entrado en un valor en el control de manera que se desencadena un error de validación. (Esto funciona bien, el texto de error se muestra en la interfaz de usuario como se esperaba).
- Ingreso un nuevo valor en el control para que la validación tenga éxito y los errores se eliminen de la colección de errores (HasErrors devuelve falso).
- Se modificó ErrorsChanged para reflejar este cambio en una validación exitosa sin errores, y se produce la excepción.
ACTUALIZACIÓN: también puedo reproducir si muevo el foco lejos de un cuadro de texto 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 de framework y al mismo tiempo no está sucediendo para otros.
ACTUALIZACIÓN: Estoy utilizando la versión RTM final de Silverlight 4. NO es un RC o Beta.
ACTUALIZACIÓN: puedo obtener el mismo resultado con la muestra oficial de MS provisto con this whitepaper.
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.
UPDATE: Aquí es la pila de llamadas del código marco donde la excepción se está produciendo obtiene por habilitar el soporte de servidor de origen con MS servidor de símbolos:
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
UPDATE: La aplicación se ejecuta bien (en la máquina del 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?
Tengo el mismo error con SL5 en VS2012 –
¿Alguna vez encontró una respuesta? Estoy teniendo problemas similares sin Silverlight http://stackoverflow.com/questions/15824070/datepicker-value-set-error-binding-to-datasource –
@kirsten No lo siento, no he encontrado una solución. Solo se pudo reproducir en esa caja con un depurador adjunto, por lo que nunca se encontró lo que era. –