好吧,我很高兴您知道 .NET RIA 服务将提供所有这些东西,但我知道大小是一个考虑因素。但请记住,由于您似乎正在考虑使用 Silverlight 3,您可以使用缓存框架程序集的选项来大大减少您的 Xap 大小:
http://www.wintellect.com/CS/blogs/jprosise/archive/2009/04/06/silverlight-3-s-new-assembly-caching.aspx
我不肯定缓存适用于 RIA 服务程序集,但如果是这样,则意味着它们只下载一次。
假设这不是您想要的,还有 2 个其他选项可以从 Linq 类(我假设您的意思是实体框架类)向客户端获取数据。正如您所提到的,最简单的方法是创建您自己的 WCF 服务。这样,您在服务器上编写数据类,代理类会在客户端自动生成模仿服务器类。这里的缺点是业务规则不会在两者之间共享。因此,您的数据验证属性将需要分别在客户端和服务器上编写和执行。
下一个选项是使用 ADO.NET 数据服务将数据从服务器移动到客户端。这是上一个选项的一个步骤,因为您不必自己编写 WCF 服务来托管数据;它是为你生成的。当然,它需要在 Xap 中打包一个额外的 Dll。
直接回答您的一些问题:
- 您永远无法将输入控件直接绑定到 Linq 数据类。您只能将控件绑定到通过引用 WCF 服务(您自己编写的或者由 ADO.NET 数据服务提供的)生成的客户端代理类。
- 如果您不使用 .NET RIA 服务,则需要创建一个自定义属性以链接到您的业务规则,然后手动处理数据绑定上的事件以读取该属性并强制执行您的规则。
- 使用上述任一选项将数据发送到服务器 - 您自己的自定义 WCF 服务或 ADO.NET 数据服务。
关于将输入控件绑定到属性的最后一个问题如下所示:
MyControl.xaml.cs:
public MyControl() {
this.DataContext = new LinqDataClass();
}
MyControl.xaml:
<TextBlock Text={Binding PropertyOnLinqDataClass}/>
在这里,LinqDataClass 是服务器端 Linq 数据类的客户端表示形式,并且有一个名为 PropertyOnLinqDataClass 的属性。您需要在客户端实现 INotifyPropertyChanged 接口以正确支持 2 路数据绑定。