2009-07-21 14 views
2

私はデータ項目のObervableCollectionを持っています。このコレクションはListBoxにバインドされています。ユーザーがリストボックスから項目を選択して「編集」ボタンをクリックすると、その項目の詳細を含むUserControlが表示され、テキストボックスにバインドされたさまざまなプロパティが表示されます。各バインディングモードはTwoWayに設定されています。この詳細UserControlでは、私は2つのボタン、OKとキャンセルを実装したいと思います。これは、WindowsのUIと一貫しています。このアプリケーションはModel-View_ViewModelパターンを使用しています。ここで私の質問です:Silverlightでの双方向データバインディングのキャンセル

1)すべての変更がすでにコミットされている場合、どのように[キャンセル]ボタンを実装できますか?

答えて

0

実際のコレクションのコピーにバインドし、OKクリックで変更をコミットするか、データオブジェクトを修正してトランザクションの変更を許可し、ダイアログ結果に応じてコミットまたはロールバックを呼び出すことができます。

0

短い答えはできないということです。データオブジェクト内の元の値はSLで保存されないため、プロセスを変更しない限り、データバインディングの結果として行われた変更を元に戻すことはできません。

私はダイアログボックスに入れる前に、編集したいオブジェクトのコピーを作ることをお勧めします。オブジェクトがシンプルな場合は、簡単に「MakeCopy」メンバを追加できます。

public MyObject MakeCopy() 
{ 
    return (MyObject)base.MemberwiseClone(); 
} 
関連する問題