我正在使用MVVM进行我的第一个WPF项目。我已经成功地抽象出了我的服务层,这样我就可以使用(例如) XML文件来存储数据。使用我的POCO的IEnumerable集合,对图形用户界面上的表的任何更改都会自动传播到存储库。
现在我正试着改用我们公司的DB2数据库。我们使用MyGeneration dOOdads为我们的DB2数据库生成DAL和BLL。DAL有内置的CRUD和其他实用方法。
我的一位同事已经成功地将MyGeneration BLL DataView绑定到他的WPF应用程序(他没有使用MVVM),这样它也可以对DataView进行实时更改(只需要调用BLL的SaveChanges方法)。
我的问题是,在MyGeneration DataView和我的POCO集合之间的转换中,我需要显式地更新这一层的任何更改。
我是不是走错了路?像AutoMapper这样的东西可以解决我的问题吗,或者我仍然没有实时映射?
public override IEnumerable<PromotionPlanHeader> ReadAll()
{
foreach (DataRow row in bll_PROMPLANH.DefaultView.Table.Rows)
{
yield return new PromotionPlanHeader
{
PlanNumber = Convert.ToInt32(row["PLANNUMBER"]),
Active = (row["ACTIVE"].ToString() == "1"),
Capturer = row["CAPTURER"].ToString(),
Region = row["REGION"].ToString(),
Cycle = row["CYCLE"].ToString(),
Channel = row["CHANNEL"].ToString(),
StartDate = ConvertDb2Date(row["STARTDATE"].ToString()),
EndDate = ConvertDb2Date(row["ENDDATE"].ToString()),
AdvertStartDate = ConvertDb2Date(row["ADVERTSTARTDATE"].ToString()),
AdvertEndDate = ConvertDb2Date(row["ADVERTENDDATE"].ToString()),
BpcsDealNumber = Convert.ToInt32(row["BPCSDEALNUMBER"]),
Description = row["DESCRIPTION"].ToString(),
DeactivationReason = row["DEACTIVATIONREASON"].ToString(),
LastSavedUsername = row["LASTUSER"].ToString(),
LastSavedDateTime = ConvertDb2DateTime(row["LASTDATE"].ToString(), row["LASTDATE"].ToString().PadLeft(6, '0'))
};
}
}发布于 2013-06-19 03:09:46
"WPF DataGrid Practical Examples"演练真的让我明白了一些事情。特别是“分层应用程序中的绑定”一章,它演示了如何使用IEditableObject接口处理更新和插入。
尽管这让我想知道BindingList是不是更好(?)
https://stackoverflow.com/questions/16987078
复制相似问题