legata alla mia domanda precedente: Binding ComboBox.SelectedItem in SilverlightBinding ComboBox.SelectedItem in Silverlight (più)
Ho un ComboBox legata in questo modo:
<ComboBox x:Name="PART_CommentaryList"
HorizontalAlignment="Left"
Margin="3"
ItemsSource="{Binding Path=CurrentVideo.Commentaries}"
SelectedItem="{Binding Path=CurrentCommentary, Mode=TwoWay}">
Sia il CurrentVideo e il cambiamento di proprietà CurrentCommentary regolarmente. Dopo alcune volte, ho ricevuto questo errore:
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)
Questo mi sembra un bug di ComboBox. Posso verificare che CurrentVideo cambi prima di CurrentCommentary, quindi l'elemento selezionato dovrebbe sempre essere un elemento presente nell'elenco.
Correlato, non desidero davvero il Modo = DueWay, perché quando si seleziona ItemsSource, il SelectedItem è temporaneamente nullo, che viene reimpostato nel mio modello, che in realtà non desidero. Ma il binding non funziona affatto (il che sembra un altro bug).
Stai verificando che CurrentCommentary sia ancora nell'elenco CurrentVideo.Commentaries, perché se non lo è, otterrai questo errore. –
Ho iniettato un convertitore in entrambe le proprietà associate per verificare se l'elemento selezionato si trova effettivamente nell'origine articoli. Il problema sembra essere: ItemsSource cambia. Tale modifica fa sì che SelectedItem diventi nullo. SelectedCommentary cambia in null perché è un binding a due vie. SelectedCommentary è impostato sul valore appropriato dall'app, questo valore è sicuramente all'interno di ItemsSource. Errore succede. Se la modalità di rilegatura non è TwoWay, non c'è errore, ma la voce corretta non viene mai selezionata. –