银光列表框投掷“;值没有落在预期范围内”;即使是空的
本文关键字:范围内 即使是 列表 | 更新日期: 2023-09-27 17:59:12
我正在用模板控件以编程方式动态填充silverlight列表框。listbox为空,当我尝试listbox.Items.Add(myTemplateControl)时,它会抛出"值不在预期范围内"参数异常。
我在调试器中验证了项集合确实是emtpy。我唯一听说过发生这种异常的时候,列表中已经包含了一个具有该名称的实例。
有什么想法吗?
堆栈跟踪:
在MS.Internal.XcpImports.MethodEx(IntPtr-ptr,字符串名称,CValue[]cvData)位于MS.Internal.XcpImports.MethodPack(IntPtr objectPtr,String methodName,Object[]rawData)位于MS.Internal.XcpImports.Collection_Add[T](PresentationFrameworkCollection`1集合,对象值)位于System.Windows.PPresentationFrameworkCollection`1.AddImpl(对象值)位于System.Windows.Controls.ItemCollection.AddImpl(对象值)位于System.Windows.Controls.ItemCollection.AddInternal(对象值)位于System.Windows.PPresentationFrameworkCollection`1.Add(T值)位于KTClientRIA.Documents.b_4(对象发送方,DownloadStringCompletedEventArgs e)在System.Net.WebClient.OnDownloadStringCompleted(DownloadStringCompletedEventArgs e)
感谢所有的建议。我找到了它。在silverlight控件生命周期的另一个时间点,有另一个与此完全分离的列表框,它正在添加一个同名项目。因为两个父列表框都位于同一个silverlight控件上,所以它爆炸了。
我提前为这是一个"未回答"的答案道歉,但也许这会有所帮助。
我有完全相同的问题,但使用的是Accordion而不是ListBox。我的控制层级是:
- UserControl(页面)
- 手风琴
- 手风琴项目0
- ContentControl
- ReportView0(在运行时动态创建并绑定到ContentControl的Content属性)
- ContentControl
- 手风琴第1项
- ContentControl
- ReportView1(在运行时动态创建,并绑定到ContentControl的Content属性)
- ContentControl
- 等等
- 手风琴项目0
- 手风琴
我第一次能够填充手风琴的ItemSource并创建ReportView控件,但如果我尝试刷新列表(比如对其进行排序),我会得到"值不在预期范围内"的异常。
我相信,当我刷新列表时,我手动创建的ReportView项从未与它们的原始父ContentControls解除关联。刷新后,当尝试将ReportView绑定到不同的AccorsionItem时,由于每个ReportView都已在可视化树中,因此引发了异常。
我的解决方案是去掉ContentControl,并在其位置声明ReportView控件。通过这种方式,Silverlight将管理可视化树中的控件。
(我最初使用动态方法,以便使用MEF通过GetExportedValue满足导入。当我发现CompositionInitializer.SatisfyImports时,我能够切换到在XAML中声明ReportView。)