.net 为WPF DataGridRow编写EventTrigger

.net 为WPF DataGridRow编写EventTrigger,.net,wpf,wpfdatagrid,wpftoolkit,eventtrigger,.net,Wpf,Wpfdatagrid,Wpftoolkit,Eventtrigger,我想在WPF DataGridRow上写一个触发器,如下所示- 当用户在该行的任何单元格中进行任何更改时,同一行的最后一个单元格应更新为某个特定值 请帮助……我不确定这是否可以用触发器来完成 对于基于MVVM的解决方案,您可以将实体更改为实现IEditableObject。当您在DataGrid中提交单元格更改时(例如,关闭或按Enter键),将调用实体的IEditableObject.EndEdit()方法。然后可以更新其中最后一个单元格的绑定属性 (由于某些原因,EndEdit()被调用了两

我想在WPF DataGridRow上写一个触发器,如下所示-

当用户在该行的任何单元格中进行任何更改时,同一行的最后一个单元格应更新为某个特定值


请帮助……

我不确定这是否可以用触发器来完成

对于基于MVVM的解决方案,您可以将实体更改为实现
IEditableObject
。当您在DataGrid中提交单元格更改时(例如,关闭或按Enter键),将调用实体的
IEditableObject.EndEdit()
方法。然后可以更新其中最后一个单元格的绑定属性

(由于某些原因,
EndEdit()
被调用了两次,这似乎是在将IEditableObject与数据网格一起使用时出现的一个怪癖/错误。问题已经提到)

如果希望在调用
IEditableObject.EndEdit()
时对其进行更多控制,可以使用DataGrid RowEditEnding和CellEditEnding事件。例如,以下
RowEditEnding
事件处理程序代码将确保仅在提交整行时(而不是在每个单元格提交后)调用实体的EndEdit()方法:-


我发现调用
DataGrid.committedit()
会导致同一事件再次触发,导致堆栈溢出,因此
\u是committingedit
变量以阻止这种情况发生。(我很想知道这是不是另一个怪癖或者我做错了什么!)

我使用Brian Hinchey在以下链接提供的解决方案解决了我的问题-

是否指定了最后一列?换句话说,最后一列中绑定的属性是固定的或不同的?最后一列绑定到同一个实体。我觉得,在这里我们不需要使用grid1.CommittedIt(DataGridEditingUnit.Row,true);我使用以下代码实现了同样的效果-private void DgTeam_RowEditEnding(对象发送方,DataGridRowEditEndingEventArgs e){if(_context.Entry((Team)e.Row.Item).State==EntityState.Modified){((团队)e.Row.Item).Mode=“e”;}}但我正在试图找出是否可以使用xamlI实现这一点。我认为这有点太复杂了,无法通过触发器实现。有时您必须求助于代码隐藏事件处理程序!如果您使用MVVM,并且担心将业务逻辑放在代码后面,它可以调用VM上的方法来设置最后一列值(假设您使用的是“视图优先”,即视图引用了VM)。
    private void RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
    {
        if (_isCommittingEdit || e.EditAction == DataGridEditAction.Cancel)
        {
            return;
        }

        if (e.EditAction == DataGridEditAction.Commit)
        {
            _isCommittingEdit = true;
            try
            {
                grid1.CommitEdit(DataGridEditingUnit.Row, true);
            }
            finally
            {
                _isCommittingEdit = false;
            }
        }
    }