一部のデータを保持するために使用している Microsoft Sql CE でテーブルを作成しました。SqlMetal を介して ORM を生成し、データソースを WPF プロジェクトに取り込みました。
ORM で生成されたクラスを介してテーブル内のレコードを編集するために使用できる単純な WPF フォームを作成したいと考えています。このフォームで、典型的な OK/Cancel セマンティクスをサポートしたいと考えています。ORM からのオブジェクトのインスタンスに対してバインドするために、それぞれのフィールドで TwoWay データバインディングを使用して、典型的な方法であると思われる方法でフォームを作成しました。たとえば、プロパティ「TaskName」を持つ ORM 内のオブジェクトが与えられた場合、WPF フォームに以下を含めました。
<Label Grid.Column="0" Grid.Row="0" >
Name:
</Label>
<TextBox Name="txtName" Grid.Column="1" Grid.Row="0"
Text="{Binding TaskName, Mode=TwoWay}" AcceptsReturn="False"
MaxLines="1" />
これを、コード内の DataContext 割り当てと組み合わせます。
var newRow = new OrmGeneratedClass();
// Populate default values on newRow, e.g.
detailWindow.DataContext = newRow;
detailWindow.ShowDialog();
新しい行の作成にはかなりうまく機能します。フォームを介して行われたすべての変更は、基になる OrmGeneratedClass にすぐに反映されます。問題は、たとえば OrmGeneratedClass が以前に保存された値で満たされている場合、変更をキャンセルするための即時サポートがないことです。
このシナリオに適した設計は何ですか? または、この時点に到達する前に間違った設計をしているのでしょうか? 私は WPF と Sql Server データソース/ORM 統合の面で初心者です。(これは、両方のテクノロジを学習するために使用している個人的なプロジェクトです。)
いくつかの考えがあり、それらを回答に入れます