1

今夜、Silverlight用の新しいWCFRIAサービスベータ版をいじくり回しています。これまでのところ見栄えは良いですが、データを取得してバインディングを介してUIに公開しようとすると、いくつかの障壁に遭遇しました。

まず、サービスから単一の整数値または文字列値を取得するにはどうすればよいですか?ドメインサービスにこのメソッドがある場合は、次のように言います。

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

これを呼び出して、結果をたとえばTextBlockにバインドするにはどうすればよいですか?

また、データをバインドするためのカスタムレイアウトを作成する方法はありますか?ListBoxやDataGridなどに少し「制限」があるように感じます。どうすれば、内部にスタックパネルを備えたグリッドを作成し、バインドされたデータを表示するいくつかのTextBlockを作成できますか?WCFRIAサービスで可能であれば:)

よろしくお願いします。

4

2 に答える 2

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;
  }
}

2番目の質問については、バインディングに制限されていません。コンテキストから取得したオブジェクトは、任意の要素にバインドできます。

于 2009-12-08T05:53:09.827 に答える
2

スキーマclassname.shared.csを使用してクラスに名前を付けることができ、このコードはSilverlightアプリケーションでも使用できます。

Silverlight / WPFデータバインディングエンジンを使用すると、データグリッド/リストボックスコンテナーとテキストボックス/ラベルなどの通常のコントロールを使用して任意の凝ったレイアウトを構築し、独自のスタイル/スキンを適用できます-

編集

共有コードには、データベース関連の関数を含めることはできません。単純な計算のみを含めることができます。サーバーからこの値を取得する場合は、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クラスをSilverlightクライアントで使用できるようにするためのすべての汚い作業は、VisualStudioによって行われます。非表示の生成されたコードフォルダを確認します。

[Invoke]属性は、RIAサービスの最新リリースでは廃止されました。

于 2009-12-08T12:42:11.330 に答える