У меня есть приложение silverlight 2, в котором есть ObservableCollection класса из отдельной сборки / библиотеки. Когда я устанавливаю свой ListBox.ItemsSource в этой коллекции и запускаю ее, я получаю код ошибки:
4004 "System.ArgumentException: Value does not fall within the expected range."
Вот часть кода:
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.





Вы пытаетесь использовать стандартную библиотеку классов или «библиотеку классов Silverlight»?
Поскольку Silverlight 2 использует подмножество CLR, он не может получить доступ к стандартным библиотекам классов, которые были скомпилированы с использованием полной CLR. Чтобы использовать внешнюю сборку, вы должны создать ее как «библиотеку классов Silverlight». Это создаст проект, который включает только пространства имен, доступные для Silverlight, и позволит вам ссылаться на сборку в вашем проекте Silverlight.
Ознакомьтесь со статьей MSDN «Библиотека классов .NET Framework для Silverlight» для получения дополнительной информации.
Это может быть потому, что вы не обрабатываете сбой в SubmittedChanges (). См. http://www.scottleckie.com/2010/04/code-4004-unhandled-error-in-silverlight-application/ для получения дополнительной информации.
Everything is in one project now.
Да, но не так, как вы только что это сделали, вместо этого поделитесь, ссылка на файлом (ами).
Для этого используется старый трюк с разумом джедаев Silverlight, когда необходимо использовать общий код entity между приложением и службой. Это делается, когда библиотека не может быть загружена из-за различий в .Net / CLR.
Уловка состоит в том, чтобы включить файл как связь в другой проект. Вот как
Add, затем Existing Item... или shiftaltA.Add и выберите стрелку раскрывающегося списка.Add as link, чтобы добавить файл (ы) в качестве ссылки в папку.
После этого остается только одна копия, но построенная в двух разных местах.
Это даст доступ к файлу будто, файл фактически находился в папке проекта, но физически файл находится в другом месте ... и позволяет избежать проблем со средой CLR.
Да, я создал ее как библиотеку классов Silverlight. После бесчисленных часов поиска в Google я просто сдался. Теперь все в одном проекте.