我有点陷入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);
}
}
}
),我可以根据需要提供。
答案 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
,如果绑定数据项实现了这个接口,网格会在编辑过程中调用相应的方法。