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

WCF RIA服务-加载数据和绑定,wcf,silverlight,ria,Wcf,Silverlight,Ria,今天晚上,我只是在玩Silverlight的新WCF RIA服务测试版。到目前为止,它看起来不错,但在尝试检索数据并通过绑定将其公开给UI时,我遇到了一些障碍 首先,我如何从我的服务中获得一个整数或字符串值?假设我的domainservice上有此方法: 公共机构雇员人数() { 返回此.ObjectContext.Employees.Count(); } 我怎样才能调用它并将结果绑定到(比如)文本块 还有,有没有办法为绑定数据创建自定义布局?我觉得有点“受限于”列表框、数据网格等等。如何制作一

今天晚上,我只是在玩Silverlight的新WCF RIA服务测试版。到目前为止,它看起来不错,但在尝试检索数据并通过绑定将其公开给UI时,我遇到了一些障碍

首先,我如何从我的服务中获得一个整数或字符串值?假设我的domainservice上有此方法:

公共机构雇员人数() { 返回此.ObjectContext.Employees.Count(); }

我怎样才能调用它并将结果绑定到(比如)文本块

还有,有没有办法为绑定数据创建自定义布局?我觉得有点“受限于”列表框、数据网格等等。如何制作一个内部带有stackpanel的网格,并使用一些文本块显示绑定的数据?如果可以使用WCF RIA服务:)


先谢谢你

要执行自定义方法,可以使用
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;
  }
}
在客户端,您可以这样使用它

[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;
  }
}
EmployeesContext context=newemployeescontext();
InvokeOperation invokeOp=context.CountEmployees(OnInvokeCompleted,null);
InvokeCompleted上的私有无效(InvokeOperation invOp)
{
if(invOp.hasrerror)
{
Show(string.Format(“方法失败:{0}”,invOp.Error.Message));
invOp.MarkErrorAsHandled();
}
其他的
{
结果=invokeOp.Value;
}
}

对于第二个问题,您不受约束。从上下文中获取的对象可以与所需的任何元素绑定。

要使用自定义方法,可以使用
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;
  }
}
在客户端,您可以这样使用它

[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;
  }
}
EmployeesContext context=newemployeescontext();
InvokeOperation invokeOp=context.CountEmployees(OnInvokeCompleted,null);
InvokeCompleted上的私有无效(InvokeOperation invOp)
{
if(invOp.hasrerror)
{
Show(string.Format(“方法失败:{0}”,invOp.Error.Message));
invOp.MarkErrorAsHandled();
}
其他的
{
结果=invokeOp.Value;
}
}

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

您可以使用schema
classname.shared.cs来命名您的类,该代码也将在silverlight应用程序中可用

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

编辑

共享代码不能包含任何与数据库相关的函数,只能包含一些普通计算。若要从服务器检索此值,则需要进行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;
}
HelloWorld context=newhelloworld();
context.SayHello(x=>context\u SayHelloCompleted(x),null);
void context_sayHello已完成(System.Windows.Ria.InvokeOperation)
{
HelloTextBlock.Text=运算值;
}
使HelloWorld类在Silverlight客户端可用的所有肮脏工作都是由VisualStudio完成的。检查隐藏的生成代码文件夹


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

您可以使用schema
classname.shared.cs来命名您的类,该代码也将在silverlight应用程序中提供

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

编辑

共享代码不能包含任何与数据库相关的函数,只能包含一些普通计算。若要从服务器检索此值,则需要进行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;
}
HelloWorld context=newhelloworld();
context.SayHello(x=>context\u SayHelloCompleted(x),null);
void context_sayHello已完成(System.Windows.Ria.InvokeOperation)
{
HelloTextBlock.Text=运算值;
}
使HelloWorld类在Silverlight客户端可用的所有肮脏工作都是由VisualStudio完成的。检查隐藏的生成代码文件夹


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

实际上,shared.cs文件将按原样提供,并且只会被复制。i、 e:您不能使用此文件中的方法访问数据库。因此,如果您只想查询员工数量,而不想查询所有数据,那么就不应该将其放入shared.cs文件中。谢谢大家!非常有意义:)因此,在调用自定义方法时,它更像是一个普通的WCF调用,而不是一个“RIA调用”,因为[Invoke]现在已经过时了?我不认为Invoke属性已经过时了,因为我在版本4中使用过它!只是对代码样式的一个小注释,
context.SayHello(context\u SayHelloCompleted,null)
比context.SayHello(x=>context\u SayHelloCompleted(x),null)更有意义。创建一个匿名方法来将消息中继到具有相同签名的方法似乎是在浪费堆栈空间:实际上,shared.cs文件将按原样可用,并且只会被复制。i、 e:您不能使用此文件中的方法访问数据库。因此,如果您只想查询员工数量,而不想查询所有数据,那么就不应该将其放入shared.cs文件中。谢谢大家!非常有意义:)因此,在调用自定义方法时,它更像是一个普通的WCF调用,而不是一个“RIA调用”,因为[Invoke]现在已经过时了?我不认为Invoke属性已经过时了,因为我在版本4中使用过它!只是对代码风格的一个小评论,
context.SayHell