1

我有点卡在 WPF 数据网格的问题上,我的 google foo 又一次让我失望了,我想做的事情看起来很简单,但我一辈子都做不到。

请记住,我正在为这个应用程序使用 Caliburn Micro

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

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

private void ItemList_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    if (e.NewItems != null)
    {
        foreach (Item i in e.NewItems)
        {
            _itemManager.Insert(i);
        }
    }
}

这是我正在使用的代码,也许我犯了一个错误,但我似乎无法弄清楚如何在编辑完成后才触发它,不幸的是无论我如何谷歌似乎都会返回相同的结果尝试改写我的问题。希望这里有人可以为我提供一个相对简单的答案。

如果您需要更多代码来向您展示事情是如何工作的(例如_itemManager),我可以在需要时提供。

4

1 回答 1

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,如果绑定的数据项实现了这个接口,grid在编辑时会调用相应的方法。

于 2013-08-20T10:36:23.243 回答