Относящиеся к моему предыдущему вопросу: Binding ComboBox.SelectedItem in SilverlightСвязывание ComboBox.SelectedItem в Silverlight (больше)
У меня есть ComboBox связаны следующим образом:
<ComboBox x:Name="PART_CommentaryList"
HorizontalAlignment="Left"
Margin="3"
ItemsSource="{Binding Path=CurrentVideo.Commentaries}"
SelectedItem="{Binding Path=CurrentCommentary, Mode=TwoWay}">
И CurrentVideo и изменения CurrentCommentary собственности на регулярной основе. Несколько раз я получаю эту ошибку:
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)
Это похоже на ошибку ComboBox. Я могу проверить, что CurrentVideo изменяется до CurrentCommentary, поэтому выбранный элемент всегда должен быть элементом, который находится в списке.
Связанный, я действительно не хочу Mode = TwoWay, потому что, когда ItemSource изменен, SelectedItem временно имеет значение null, которое возвращается в мою модель, чего я действительно не хочу. Но привязка вообще не работает (что похоже на другую ошибку).
Вы проверяете, действительно ли CurrentCommentary по-прежнему находится в списке CurrentVideo.Commentaries, потому что, если это не так, вы получите эту ошибку. –
Я ввел конвертер в оба связанных свойства, чтобы проверить, действительно ли выбранный элемент находится в источнике items. Кажется, что проблема связана с изменениями ItemsSource. Это изменение приводит к тому, что SelectedItem становится нулевым. SelectedCommentary изменяет значение null, потому что это двусторонняя привязка. SelectedCommentary настроен на правильное значение для приложения, это значение определенно находится в ItemsSource. Ошибка. Если режим привязки не является TwoWay, ошибки нет, но тогда соответствующий элемент никогда не будет выбран. –