Что ж, я рад, что вы знаете, что .NET RIA Services предоставит все эти вещи, но я понимаю, что размер имеет значение. Имейте в виду, что, поскольку похоже, что вы рассматриваете Silverlight 3, вы можете использовать опцию для кэширования сборок фреймворка, чтобы значительно уменьшить размер Xap:
http://www.wintellect.com/CS/blogs/jprosise/archive/2009/04/06/silverlight-3-s-new-assembly-caching.aspx
Я не уверен, что кэширование применимо к сборкам RIA Services, но если это так, это означает, что они загружаются только один раз.
Предполагая, что это не то, что вам нужно, есть 2 других варианта передачи данных из классов Linq (я предполагаю, что вы имеете в виду классы Entity Framework) для клиента. Самый простой способ - создать собственную службу WCF, как вы упомянули. Таким образом, вы пишете классы данных на сервере, и прокси-классы автоматически генерируются на клиенте, который имитирует серверные классы. Недостатком здесь является то, что бизнес-правила не будут разделены между ними. Таким образом, ваши атрибуты проверки данных должны будут записываться и применяться на клиенте и сервере отдельно.
Следующим вариантом является использование ADO.NET Data Services для перемещения данных с сервера на клиент. Это на шаг выше предыдущего, поскольку вам не нужно самостоятельно писать службу WCF для размещения данных; он создан для вас. Конечно, это требует дополнительной Dll для упаковки в Xap.
Чтобы ответить на некоторые ваши вопросы напрямую:
- Вы никогда не сможете связать элемент управления вводом напрямую с классом данных Linq. Вы можете привязать элементы управления только к прокси-классам на стороне клиента, которые генерируются путем ссылки на службу WCF (либо ту, что вы написали самостоятельно, либо ту, которая предоставлена ADO.NET Data Services).
- Если вы не используете .NET RIA Services, вам потребуется создать собственный атрибут для связи с вашими бизнес-правилами, а затем вручную обработать события в привязках данных, чтобы прочитать атрибут и применить ваши правила.
- Для отправки данных на сервер используйте любой из вышеперечисленных вариантов - либо собственную пользовательскую службу WCF, либо службы данных ADO.NET.
Ваш последний вопрос о привязке элемента управления вводом к свойству выглядит следующим образом:
MyControl.xaml.cs:
public MyControl() {
this.DataContext = new LinqDataClass();
}
MyControl.xaml:
<TextBlock Text={Binding PropertyOnLinqDataClass}/>
Здесь LinqDataClass является представлением на стороне клиента вашего класса данных Linq на стороне сервера и имеет свойство PropertyOnLinqDataClass. Вам потребуется реализовать интерфейс INotifyPropertyChanged на стороне клиента для правильной поддержки двусторонней привязки данных.