gpt4 book ai didi

silverlight - 在 Silverlight 中绑定(bind) ComboBox.SelectedItem(更多)

转载 作者:行者123 更新时间:2023-12-04 06:00:57 24 4
gpt4 key购买 nike

与我之前的问题相关:Binding ComboBox.SelectedItem in Silverlight

我有一个像这样绑定(bind)的 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,因为当 ItemsSource 更改时,SelectedItem 暂时为空,这会在我的模型中重新设置,而我实际上并不想要。但是绑定(bind)根本不起作用(这似乎是另一个错误)。

最佳答案

这是 ComboBox 控件中的一个错误,与 ItemsSource 绑定(bind)的更改指针有关。我找到的解决方案是:

1) 始终将 ItemsSource 绑定(bind)到可观察集合,并且从不重置 OC 的指针。

<ComboBox ItemsSource="{Binding MyList}" SelectedItem="{Binding MyItem}" />

坏的:
MyList = new ObservableCollection();

好的:
MyList.Clear();
MyList.AddRange(...);

2) 在清除 MyList 之前设置 MyItem = null

在您的情况下,每当您更改 CurrentView 时,您都会更改列表的引用。因此,如果 SelectedItem 不为空,则会有一小段时间重置 ItemsSource,ComboBox 的内部试图在新的 ItemsSource 中定位 SelectedItem 对象,但旧对象不存在。

关于silverlight - 在 Silverlight 中绑定(bind) ComboBox.SelectedItem(更多),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/864322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com