내 앞의 질문에 관련 : Binding ComboBox.SelectedItem in Silverlight이 (더)
는 I는 콤보 상자과 같이 결합했다 :
<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 이전에 변경되었음을 확인할 수 있으므로 선택한 항목은 항상 목록에있는 항목이어야합니다.
관련하여 실제로 ItemsSource가 변경되면 SelectedItem이 일시적으로 null이되어 실제로 원하지 않는 모델에 다시 설정되기 때문에 Mode = TwoWay는 필요하지 않습니다. 그러나 바인딩은 다르게 작동하지 않습니다 (다른 버그와 같음). .
CurrentCommentary가 CurrentVideo.Commentaries 목록에 있는지 확인하고 있습니까? 그렇지 않은 경우이 오류가 발생합니다. –
선택한 항목이 실제로 항목 소스에 있는지 여부를 검사하기 위해 두 바인드 속성에 변환기를 주입했습니다. 문제는 ItemsSource 변경 사항 인 것 같습니다. 이 변경으로 인해 SelectedItem은 null이됩니다. SelectedCommentary는 양방향 바인딩이므로 null로 변경됩니다. SelectedCommentary가 앱에 의해 적절한 값으로 설정되면이 값은 ItemsSource 내에 확실히 있습니다. 오류가 발생합니다. Y 인딩 모드가 TwoWay가 아니면 오류는 없지만 적절한 항목은 절대로 선택되지 않습니다. –