Silverlight 2 ArgumentException

У меня есть приложение silverlight 2, в котором есть ObservableCollection класса из отдельной сборки / библиотеки. Когда я устанавливаю свой ListBox.ItemsSource в этой коллекции и запускаю ее, я получаю код ошибки:

4004 System.ArgumentException: значение не попадает в ожидаемый диапазон.

Вот часть кода:

public partial class Page : UserControl
{
    ObservableCollection<Some.Lib.Owner> ooc;

    public Page()
    {
        
        ooc = new ObservableCollection<Some.Lib.Owner>();
        Some.Lib.Owner o1 = new Some.Lib.Owner() { FirstName = "test1" };
        Some.Lib.Owner o2 = new Some.Lib.Owner() { FirstName = "test2" };
        Some.Lib.Owner o3 = new Some.Lib.Owner() { FirstName = "test3" };
        ooc.Add(o1);
        ooc.Add(o2);
        ooc.Add(o3);

        InitializeComponent();
        lb1.ItemsSource = ooc;
    }
}

Но когда я создаю класс Owner в этом же проекте, все работает нормально. Что-то происходит за кулисами? Кроме того, я использую параметр создания страницы html, а не параметр aspx, когда создавал это приложение Silverlight 2.


person jkidv    schedule 12.12.2008    source источник


Ответы (3)


Вы пытаетесь использовать стандартную библиотеку классов или «библиотеку классов Silverlight»?

Поскольку Silverlight 2 использует подмножество CLR, он не может получить доступ к стандартным библиотекам классов, которые были скомпилированы с использованием полной CLR. Чтобы использовать внешнюю сборку, вы должны создать ее как «библиотеку классов Silverlight». Это создаст проект, который включает только пространства имен, доступные для Silverlight, и позволит вам ссылаться на сборку в вашем проекте Silverlight.

Ознакомьтесь со статьей MSDN "Библиотека классов .NET Framework для Silverlight " для получения дополнительной информации.

person Abram Simon    schedule 17.12.2008
comment
Да, я создал ее как библиотеку классов Silverlight. После бесчисленных часов поиска в Google я просто сдался. Теперь все в одном проекте. - person jkidv; 18.12.2008

Это может быть связано с тем, что вы не обрабатываете сбой в SubmittedChanges (). См. http://www.scottleckie.com/2010/04/code-4004-unhandled-error-in-silverlight-application/ для получения дополнительной информации.

person Scott Leckie    schedule 24.04.2010

Теперь все в одном проекте.

Да, но не так, как вы только что сделали, вместо этого поделитесь ссылкой на файл (ы).

Для этого используется старый трюк джедаев в Silverlight, когда необходимо использовать общий entity код между приложением и службой. Это делается, когда библиотека не может быть загружена из-за различий в .Net / CLR.

Уловка состоит в том, чтобы включить файл как ссылку в другой проект. Вот как

  1. В целевой папке (проект Silverlight), для которой требуется файл кода, щелкните правой кнопкой мыши и выберите Add, затем Existing Item... или shift alt A.
  2. Перейдите к местоположению найденных исходных файлов и выберите / эти файлы.
  3. После выбора элемента (ов) нажмите кнопку Add и выберите стрелку раскрывающегося списка.
  4. Выберите Add as link, чтобы добавить файл (ы) в качестве ссылки в папку.

введите описание изображения здесь

После этого остается только одна копия, но построенная в двух разных местах.

Это даст доступ к файлу , как если бы файл действительно находился в папке проекта, но физически файл находится в другом месте ... и позволяет избежать проблем со средой CLR.

person ΩmegaMan    schedule 17.12.2020