Я заранее прошу прощения за то, что это был ответ «без ответа», но, возможно, это поможет.
У меня была точно такая же проблема, но с Аккордеоном вместо ListBox. Моя иерархия управления была:
- UserControl (страница)
- Аккордеон
- AccordionItem0
- ContentControl
- ReportView0 (динамически создается во время выполнения и привязывается к свойству ContentControl Content)
- AccordionItem1
- ContentControl
- ReportView1 (динамически создается во время выполнения и привязывается к свойству ContentControl Content)
- и т.д.
Мне удалось заполнить ItemSource аккордеона и создать элементы управления ReportView в первый раз, но если бы я попытался обновить список (скажем, отсортировать его), я бы получил «Значение не попадает в ожидаемый диапазон» исключение.
Я полагаю, что когда я обновлял список, мои созданные вручную элементы ReportView никогда не были отделены от их исходных родительских ContentControls. После обновления при попытке связать ReportViews с другим AccordionItem выдается исключение, поскольку каждый ReportView уже был в визуальном дереве.
Моим решением было избавиться от ContentControl и объявить вместо него элемент управления ReportView. Таким образом, Silverlight будет управлять элементом управления в визуальном дереве.
(Первоначально я использовал динамический подход, чтобы можно было использовать MEF для удовлетворения импорта через GetExportedValue. Когда я узнал о CompositionInitializer.SatisfyImports, я смог переключиться на объявление ReportView в XAML.)