relacionados con mi pregunta anterior: Binding ComboBox.SelectedItem in SilverlightEncuadernación ComboBox.selectedItem en Silverlight (más)
Tengo un cuadro combinado con destino así:
<ComboBox x:Name="PART_CommentaryList"
HorizontalAlignment="Left"
Margin="3"
ItemsSource="{Binding Path=CurrentVideo.Commentaries}"
SelectedItem="{Binding Path=CurrentCommentary, Mode=TwoWay}">
Tanto el CurrentVideo y el cambio de propiedad CurrentCommentary regularidad. Después de algunas veces, aparece este error:
Category: ManagedRuntimeError
Message: System.ArgumentException: Value does not fall within the expected
range.
at MS.Internal.XcpImports.MethodEx(IntPtr ptr, String name,
CValue[] cvData)
at MS.Internal.XcpImports.MethodPack(IntPtr objectPtr, String methodName,
Object[] rawData)
at MS.Internal.XcpImports.UIElement_TransformToVisual(UIElement element,
UIElement visual)
at System.Windows.UIElement.TransformToVisual(UIElement visual)
at System.Windows.Controls.Primitives.Selector.IsOnCurrentPage(
Int32 index, Rect& itemsHostRect, Rect& listBoxItemRect)
at System.Windows.Controls.Primitives.Selector.ScrollIntoView(
Int32 index)
at System.Windows.Controls.Primitives.Selector.SetFocusedItem(
Int32 index, Boolean scrollIntoView)
at System.Windows.Controls.ComboBox.PrepareContainerForItemOverride(
DependencyObject element, Object item)
at System.Windows.Controls.ItemsControl.UpdateContainerForItem(
Int32 index)
at System.Windows.Controls.ItemsControl.RecreateVisualChildren()
at System.Windows.Controls.ItemsControl.RecreateVisualChildren(
IntPtr unmanagedObj)
Esto me parece un error de ComboBox. Puedo verificar que CurrentVideo cambie antes de CurrentCommentary, por lo que el elemento seleccionado siempre debe ser un elemento que esté en la lista.
Relacionado, realmente no quiero el Modo = TwoWay, porque cuando se cambia ItemsSource, SelectedItem es temporalmente nulo, lo que se retrotrae en mi modelo, lo que en realidad no quiero. Pero el enlace no funciona en absoluto (lo que parece ser otro error).
¿Está revisando para asegurarse de que CurrentCommentary todavía está en la lista CurrentVideo.Commentaries, porque si no lo está, obtendrá este error. –
Inyecté un convertidor en ambas propiedades enlazadas para inspeccionar si el elemento seleccionado está o no en el ítem fuente. El problema parece ser: ItemsSource changes. Ese cambio hace que SelectedItem se vuelva nulo. SelectedCommentary cambia a nulo porque es un enlace bidireccional. SelectedCommentary se establece en el valor correcto por la aplicación, este valor es definitivamente dentro de ItemsSource. Ocurre un error Si el modo de enlace no es TwoWay, no hay ningún error, pero nunca se selecciona el elemento adecuado. –