如何通过WCF发送Linq数据类并使用此类属性绑定输入控件?

时间:2009-05-21 11:45:49

标签: linq wcf silverlight-3.0

强类型& 类型安全解决方案,我必须执行以下步骤。

  1. 创建一些Silverlight应用程序。
  2. 将输入控件绑定到Linq数据类。
  3. 使用数据类属性的规则验证数据。
  4. 通过WCF向服务器发送数据。
  5. 但是,我有一些问题。

    1. 如何将输入控件与linq数据类属性绑定?
    2. 如何使用最少的层(层)和最少的必需dll(对于Silverlight项目)?
    3. PS。 .Net RIA服务 - 5月预览不是我的最终答案。因为所有必需的dll和一些生成代码的大小。

      感谢

1 个答案:

答案 0 :(得分:1)

嗯,我很高兴你知道.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服务程序集,但如果是这样,则意味着它们只下载一次。

假设这不是你想要的,还有2个其他选项可以从Linq类(我假设你的意思是实体框架类)中获取数据到客户端。最简单的方法是创建自己的WCF服务,如上所述。这样,您就可以在服务器上编写数据类,并在模拟服务器类的客户端上自动生成代理类。这里的缺点是业务规则不会在两者之间共享。因此,您需要在客户端上编写和执行您的数据验证属性。服务器分开。

下一个选项是使用ADO.NET Data Services将数据从服务器移动到客户端。这比上一个选项高出一步,因为您不必自己编写WCF服务来托管数据;它是为你生成的。当然,它需要在Xap中打包一个额外的Dll。

直接回答您的一些问题:

  1. 您无法将输入控件直接绑定到Linq数据类。您只能将控件绑定到通过引用WCF服务(您自己编写的或由ADO.NET Data Services提供的服务)生成的客户端代理类。
  2. 如果您不使用.NET RIA服务,则需要创建自定义属性以链接到业务规则,然后手动处理数据绑定上的事件以读取属性并强制执行规则。
  3. 使用上述任一选项将数据发送到服务器 - 您自己的自定义WCF服务或ADO.NET数据服务。
  4. 关于将输入控件绑定到属性的最后一个问题如下所示:

    MyControl.xaml.cs:
    
    public MyControl() {
      this.DataContext = new LinqDataClass();
    }
    
    MyControl.xaml:
    <TextBlock Text={Binding PropertyOnLinqDataClass}/>
    

    这里,LinqDataClass是服务器端Linq数据类的客户端表示,并且有一个名为PropertyOnLinqDataClass的属性。您需要在客户端实现INotifyPropertyChanged接口以正确支持双向数据绑定。