在EditingElement未知时获取编辑的GridView项

时间:2012-02-13 14:09:29

标签: c# wpf gridview

我有一个UserControl,它基本上是GridView的包装器,每次更改GridView的单元格内容时都需要发送消息。通常,这可以这样解决:

private void MainDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
    {
        var editingTextBox = e.EditingElement as TextBox;
        doSomething(editingTextBox.Text);
    }

问题是我不知道EditingElement的类型(作为FrameworkElement出现)所以我不能进行转换。在那一刻, currentCell.SelectedValue 仍然是原始值。我也无法控制模型(我可以在其中实现 INotifyPropertyChanged 并使用它来捕获更改)。

我错过了一些简单的方法吗?或者您将如何实现这一目标?感谢您的任何建议。

2 个答案:

答案 0 :(得分:1)

将您的模型包装在CollectionView中并将其用于绑定。

myCollectionView = (CollectionView)
    CollectionViewSource.GetDefaultView(rootElem.DataContext);

这将为您提供INotifyPropertyChanged界面。

<强>更新 对不起,我的第一个答案有点误导。

如果您无法更改模型,则应创建视图模型。实现INotifyPropertyChanged的视图模型可以在不了解当前视图的情况下提供所需的更改事件。这样,视图不直接依赖于模型。

进一步阅读: The role of the model in MVVM

答案 1 :(得分:0)

我找到了一个非常简单的解决方案(不能相信我没见过那个),它是从DataGrid中捕获两个事件组成的。 这是代码:

private object changedRow;

    private void MainDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
    {
        changedRow = e.Row.Item;
    }

    private void MainDataGrid_CurrentCellChanged(object sender, EventArgs e)
    {
        if (changedRow != null)
        {
            // do something with the edited row here
            changedRow = null;
        }
    }