La Liaison De Zone De Liste Déroulante.SelectedItem en Silverlight (plus)

Liées à ma question précédente: La Liaison De Zone De Liste Déroulante.SelectedItem en Silverlight

J'ai un ComboBox lié de la sorte:

<ComboBox x:Name="PART_CommentaryList" 
    HorizontalAlignment="Left" 
    Margin="3" 
    ItemsSource="{Binding Path=CurrentVideo.Commentaries}" 
    SelectedItem="{Binding Path=CurrentCommentary, Mode=TwoWay}">

À la fois la CurrentVideo et CurrentCommentary bien changer régulièrement. Quelques temps après, je reçois cette erreur:

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)

Cela semble être une zone de liste déroulante bug pour moi. Je peux vérifier que CurrentVideo modifications avant de CurrentCommentary, de sorte que l'élément sélectionné doit toujours être un élément qui est dans la liste.

Liés, je ne veux vraiment pas le Mode=TwoWay, parce que quand le ItemsSource est modifié, le SelectedItem est temporairement null, qui est de retour dans mon modèle, je n'ai pas vraiment envie. Mais la liaison ne fonctionne pas à tous les autres (ce qui semble être un autre bug).

Êtes-vous de vérifier que la CurrentCommentary est toujours dans le CurrentVideo.Commentaires de la liste, parce que si elle ne l'est pas, alors vous aurez cette erreur.
J'ai injecté un convertisseur vers les deux propriétés liées afin de vérifier si l'élément sélectionné est en effet dans la itemssource. La question semble être: ItemsSource changements. Ce changement provoque SelectedItem à devenir nulle. SelectedCommentary des changements à la valeur null, car c'est une liaison bidirectionnelle. SelectedCommentary est sur la bonne valeur par l'application, cette valeur est certainement à l'intérieur de ItemsSource. Erreur se produit. Si le mode de fixation n'est pas Bidirectionnelle, il n'y a pas d'erreur, mais alors le bon élément n'est jamais sélectionné.

OriginalL'auteur Josh Santangelo | 2009-05-14