WCF RIA服务 - 加载数据和绑定

时间:2009-12-08 04:23:25

标签: wcf silverlight ria

我今晚刚刚为Silverlight推出了新的WCF RIA服务测试版。到目前为止,它看起来很不错,但在尝试检索数据并通过绑定将其暴露给UI时,我遇到了一些障碍。

首先,我如何从我的服务中获取单个整数或字符串值?假设我的域服务上有这个方法:

public int CountEmployees()         {             return this.ObjectContext.Employees.Count();         }

我如何调用此函数并将结果绑定到TextBlock?

另外,有没有办法为绑定数据制作自定义布局?我觉得有点“限制”ListBox,DataGrid等。怎么可能,即在一个带有stackpanel的Grid中,并有一些TextBlocks显示绑定数据?如果可以使用WCF RIA服务:)

提前多多感谢。

2 个答案:

答案 0 :(得分:3)

要执行自定义方法,您可以使用Invoke属性。 在服务器端,您在这样的域服务中声明

[EnableClientAccess]
public class EmployeesService : DomainService
{
    [Invoke]
    public int CountEmployees() 
    {
        return this.ObjectContext.Employees.Count(); 
    }
}

在您的客户端,您可以像这样使用它

EmployeesContext context = new EmployeesContext();
InvokeOperation<int> invokeOp = context.CountEmployees(OnInvokeCompleted, null);

private void OnInvokeCompleted(InvokeOperation<int> invOp)
{
  if (invOp.HasError)
  {
    MessageBox.Show(string.Format("Method Failed: {0}", invOp.Error.Message));
    invOp.MarkErrorAsHandled();
  }
  else
  {
    result = invokeOp.Value;
  }
}

对于第二个问题,您不受限制。您从上下文中获得的对象可以与您想要的任何元素绑定。

答案 1 :(得分:2)

您可以使用架构classname.shared.cs命名您的类,此代码也可以在silverlight应用程序中使用。

使用Silverlight / WPF数据绑定引擎,您可以使用datagrid / listbox容器和常规控件(如textbox / label)构建任何花哨的布局,并应用您自己的样式/皮肤 - Example

修改

共享代码不能包含任何与数据库相关的函数,只能包含一些简单的计算。如果要从服务器检索此值,则需要进行WCF方法调用。

在服务器端,您可以创建DomainService实现:

   [EnableClientAccess()]
    public class HelloWorld : DomainService
    {
        public string SayHello()
        {
            return "Test";
        }
    }

然后你可以在客户端使用它:

    HelloWorld context = new HelloWorld();
    context.SayHello(x => context_SayHelloCompleted(x), null);

void context_SayHelloCompleted(System.Windows.Ria.InvokeOperation<string> op)
{
    HelloTextBlock.Text = op.Value;
}

在Silverlight客户端上提供HelloWorld类的所有脏工作都是由Visual Studio完成的。检查隐藏的生成代码文件夹。

[Invoke]属性在最新版本的RIA服务中已过时。