将MVVM IEnumerable <poco>绑定到MyGeneration BLL实体(实时)</poco>

时间:2013-06-07 14:54:12

标签: wpf mvvm ienumerable observablecollection bindinglist

我正在使用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'))
        };
    }
}

1 个答案:

答案 0 :(得分:0)

"WPF DataGrid Practical Examples"演练确实为我解决了一些问题。特别是,分层应用程序中的绑定一章,演示了如何使用IEditableObject接口处理更新和插入。

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