2011-01-09 10 views
0

私は単純なSLユーザーコントロールを持っています。すべての顧客を表示するリストボックスと、リストボックス内のSelectedItem(Customer)にバインドされているテキストボックスとコンボボックスの数を右側に表示します。 SelectedItemはSelectedCustomerプロパティにバインドされます。Silverlight Twowayバインドとロールバックの変更 - 方法?

私は、顧客に加えられた変更をキャンセルするためのパターン/方法論を探しています(バインドされたテキストボックスやコンボボックス内)。

編集コントロール(テキストボックスとコンボ)は、リストボックスの選択された項目に1つまたは2つの方法でバインドできます。 双方向バインドの場合、テキストボックスの即時の変更がリストボックスに反映されます。一方向にバインドされている場合、テキストボックスの変更はSelectedCustomerオブジェクトに反映されません。

編集フォームの下部には、保存、キャンセル、削除の各ボタンがあります。たとえばSaveボタンはSelectedCustomerオブジェクトを取得します(二重にバインドされていればサーバー上に保存するためのサービスを送信します)。

テキストボックスが一方向にバインドされている場合は、テキストボックスの値をキャプチャして保存するためにサーバーに送信するオブジェクトに挿入する必要があります。

twowayバインディングを使用していて、保存操作が失敗したとしたら、SelectedCustomer値を元の値に戻す必要があります。そうしないと、クライアントは保存されていないデータを表示し続けます。

このタイプのシナリオに対処するための簡単な方法があるに違いありません....

答えて

0

エンティティフレームワークを使用したRIAサービスは、この機能を既に提供しています。基本的にRIAサービスがどのように機能するのですか。

各クラスは、メソッドBeginEdit/EndEditとCancelEditを提供するIEditableObjectというインターフェイスを実装しています。また、同じクラスのインスタンスを "OriginalEntity"という名前でサーバーからロードしたものと同じ値で格納(コピー)します。

ユーザーが変更するフォームが表示されたら、BeginEditが呼び出されます。おそらく、リフレクションを使用するすべてのプロパティが何らかの辞書にキャッシュされます。 CancelEditを呼び出すと、OriginalEntityの値がオブジェクトに戻されます。

変更を保存中にエラーが発生した場合は、サーバーからエンティティをリフレッシュ(最善の方法)するか、OringalEntityプロパティからプロパティを読み込むことができます。

+0

いいから、私がやったことは、私の顧客クラス、すなわちパブリック部分クラス顧客:SLアプリケーションのIEditableObjectの部分クラスを作成したことです。メソッド内では、ここで見つけたのと同様のコードをhttp://www.silverlight.net/learn/tutorials/silverlight-4/web-services-and-silverlight/#Exercise3 – David

+0

-1の回答を受け取りましたか?コメントしてください.... Mr Smart -1 Voter ... –

0

ことが簡単にユーザーの不満につながるとして、私は、ユーザーの変更を破棄しないでしょう。 IMHOでは、制御されていないデータのロールバックによる接続の問題について、ユーザーに知らせるべきではありません。

+0

本当に、私の特定のシナリオでは、ユーザはボタンキャンセルを押すので、編集フォームとリストボックスで行われた編集をロールバックする必要があります。 – David

関連する問題