WPF - Datagrid在编辑后获取新项目

时间:2013-08-20 09:53:20

标签: c# wpf datagrid caliburn.micro

我有点陷入WPF数据网格的问题,再一次我的谷歌foo让我失望,我想做的事情似乎很简单,但我不能为我的生活做好准备。

请记住,我正在使用Caliburn Micro进行此应用程序

我有一个数据网格,绑定到ObservableCollection<Item>项目本身使用NotifyOfPropertyChange IsDirty 标记处理更改,因此编辑这些项目不是问题,但是我无法弄清楚如何处理新添加的项目,我们使用datagrid的 CanUserEditRows 属性来允许内联添加新项目。

然而,当我尝试检测到要添加的新项目时,我的问题出现了,为了将其发送到我的数据库服务,似乎很多人按顺序使用CollectionChanged的{​​{1}}事件检测到这一点,但是在插入任何数据之前,用户点击数据网格的ObservableCollection部分时,这似乎就会触发。

{NewItemPlaceholder}

这是我正在使用的代码,也许我犯了一个错误,但我似乎无法解决如何在编辑完成后才启动它,不幸谷歌似乎返回相同的结果没有我怎么试着改写我的问题。希望这里有人可以为我提供一个相对简单的答案。

如果您需要更多代码来向您展示如何运作(例如private void ItemList_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.NewItems != null) { foreach (Item i in e.NewItems) { _itemManager.Insert(i); } } } ),我可以根据需要提供。

1 个答案:

答案 0 :(得分:3)

这很简单:

// instances of this type user should edit in data grid
public class Item : IEditableObject
{
    // the item identifier
    public int Id { get; set; }

    // some data-bound properties

    #region IEditableObject Members

    public void BeginEdit()
    {            
    }

    public void CancelEdit()
    {
    }

    public void EndEdit()
    {
        // new items has identifier, set to 0
        if (Id == 0)
        {
            // post changes here
        }
    }

    #endregion
}

DataGrid知道IEditableObject,如果绑定数据项实现了这个接口,网格会在编辑过程中调用相应的方法。