Выдает список серебряного списка «значение не попадает в ожидаемый диапазон», даже если оно пустое? - PullRequest
3 голосов
/ 14 июня 2011

Я динамически заполняю список списка Silverlight программным способом с помощью шаблона.список пуст, и когда я пытаюсь создать listBox.Items.Add (myTemplateControl), он выбрасывает аргумент «Значение не попадает в ожидаемый диапазон».

Я подтвердил в отладчике, что коллекция элементовдействительно эмтпы.единственный раз, когда я слышал об этом исключении, это когда список уже содержит экземпляр с таким именем.

есть мысли?

Трассировка стека:

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.Collection_Add[T](PresentationFrameworkCollection`1 collection, Object value)
at System.Windows.PresentationFrameworkCollection`1.AddImpl(Object value)
at System.Windows.Controls.ItemCollection.AddImpl(Object value)
at System.Windows.Controls.ItemCollection.AddInternal(Object value)
at System.Windows.PresentationFrameworkCollection`1.Add(T value)
at KTClientRIA.Documents.b__4(Object sender, DownloadStringCompletedEventArgs e)
at System.Net.WebClient.OnDownloadStringCompleted(DownloadStringCompletedEventArgs e)

Ответы [ 2 ]

2 голосов
/ 25 июня 2011

Спасибо всем предложениям.Я был в состоянии отследить это.В другой момент времени жизненного цикла элемента управления silverlight был еще один список, совершенно отдельный от этого, в который добавлялся элемент с тем же именем.поскольку оба родительских списка находились на одном и том же элементе управления Silverlight, он взрывался.

0 голосов
/ 14 июня 2011

Я заранее прошу прощения за то, что это был ответ «без ответа», но, возможно, это поможет.

У меня была точно такая же проблема, но с Аккордеоном вместо 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.)

...