我在 Microsoft Sql CE 中创建了一个用于保存一些数据的表。我已经通过 SqlMetal 生成了一个 ORM,并将数据源拉到了我的 WPF 项目中。
我想创建一个简单的 WPF 表单,可用于通过 ORM 生成的类编辑表中的记录。我希望这个表单支持典型的 OK/Cancel 语义。我以我认为是典型的方式创建了表单,在各个字段上使用 TwoWay 数据绑定来绑定来自 ORM 的对象实例。例如,给定 ORM 中具有属性“TaskName”的对象,我在 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 集成方面的新手。(这是我用来学习这两种技术的个人项目。)
我有几个想法,并将它们放在答案中