Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF-Datagrid在编辑后获取新项_C#_Wpf_Datagrid_Caliburn.micro - Fatal编程技术网

C# WPF-Datagrid在编辑后获取新项

C# WPF-Datagrid在编辑后获取新项,c#,wpf,datagrid,caliburn.micro,C#,Wpf,Datagrid,Caliburn.micro,我在WPF数据网格的问题上有点纠结,我的google foo再一次让我失望,我想做的事情似乎很简单,但我一辈子都无法解决 请记住,我正在使用Caliburn Micro用于此应用程序 我有一个datagrid,它绑定到一个ObservableCollection项本身使用NotifyOfPropertyChange和IsDirty标志处理更改,因此编辑这些项不是问题,但是我无法解决如何处理添加的新项,我们使用datagrid的CanUserEditRows属性来允许内联添加新项 然而,当我尝试检

我在WPF数据网格的问题上有点纠结,我的google foo再一次让我失望,我想做的事情似乎很简单,但我一辈子都无法解决

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

我有一个datagrid,它绑定到一个
ObservableCollection
项本身使用
NotifyOfPropertyChange
IsDirty标志处理更改,因此编辑这些项不是问题,但是我无法解决如何处理添加的新项,我们使用datagrid的CanUserEditRows属性来允许内联添加新项

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

private void ItemList_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    if (e.NewItems != null)
    {
        foreach (Item i in e.NewItems)
        {
            _itemManager.Insert(i);
        }
    }
}
这是我正在使用的代码,也许我犯了一个错误,但我似乎无法解决如何在编辑完成后才能启动该代码,不幸的是,无论我如何尝试和改写我的问题,谷歌似乎都返回了相同的结果。希望这里有人能给我一个相对简单的答案

如果您需要更多的代码来演示如何工作(如
\u itemmager
),我可以根据需要提供。

非常简单:

// 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
知道,如果绑定的数据项实现了此接口,grid将在编辑过程中调用相应的方法。

编辑该项不是我的问题,编辑工作正常,它能够使用DataGrid本身上的{NewItemPlaceholder}告诉DataGrid何时已将新项添加到DataGrid,您的解决方案是否会在每次编辑时启动,而不管该项目是否为新项目?“添加新项目时”-这很简单,因为您应该为“新项目”设定一个标准。更新了答案。感谢您的回复,这很有意义。不过我有一个简单的问题,CRUD函数由我的viewmodel中的_itemManager处理,现在我正在考虑在我的对象上使用IsNew属性,并以保存时使用IsDirty的相同方式进行检查。然而,我想知道是否有一种更干净的方法,在保存数据时必须检查每个项目的isnew和isdirty。您是在编辑后立即保存项目,还是使用批处理更新一次保存多个项目?就个人而言,我更喜欢使用枚举方法,如
ItemState
New
Dirty
Unchanged
)和可编辑项中的单个状态属性,而不是
IsNew
IsDirty