0

我正在使用 MVVM 处理我的第一个 WPF 项目。我已经成功地抽象出我的服务层,以便我可以使用(例如)XML 文件来存储数据。使用我的 POCO 的 IEnumerable 集合,对 GUI 上表的任何更改都会自动传播到存储库。

现在我正尝试改用我们公司的 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'))
        };
    }
}
4

1 回答 1

0

WPF DataGrid Practical Examples”演练确实为我弄清楚了一些事情。特别是分层应用程序中的绑定一章,它演示了如何使用 IEditableObject 接口处理更新和插入。

虽然这让我想知道 BindingList 是否更好(?)

于 2013-06-18T19:09:46.470 回答