银光列表框投掷“;值没有落在预期范围内”;即使是空的

本文关键字:范围内 即使是 列表 | 更新日期: 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属性)
      • 手风琴第1项
        • ContentControl
          • ReportView1(在运行时动态创建,并绑定到ContentControl的Content属性)
      • 等等

我第一次能够填充手风琴的ItemSource并创建ReportView控件,但如果我尝试刷新列表(比如对其进行排序),我会得到"值不在预期范围内"的异常。

我相信,当我刷新列表时,我手动创建的ReportView项从未与它们的原始父ContentControls解除关联。刷新后,当尝试将ReportView绑定到不同的AccorsionItem时,由于每个ReportView都已在可视化树中,因此引发了异常。

我的解决方案是去掉ContentControl,并在其位置声明ReportView控件。通过这种方式,Silverlight将管理可视化树中的控件。

(我最初使用动态方法,以便使用MEF通过GetExportedValue满足导入。当我发现CompositionInitializer.SatisfyImports时,我能够切换到在XAML中声明ReportView。)