我有一个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 并使用它来捕获更改)。
我错过了一些简单的方法吗?或者您将如何实现这一目标?感谢您的任何建议。
答案 0 :(得分:1)
将您的模型包装在CollectionView
中并将其用于绑定。
myCollectionView = (CollectionView)
CollectionViewSource.GetDefaultView(rootElem.DataContext);
这将为您提供INotifyPropertyChanged
界面。
<强>更新强> 对不起,我的第一个答案有点误导。
如果您无法更改模型,则应创建视图模型。实现INotifyPropertyChanged
的视图模型可以在不了解当前视图的情况下提供所需的更改事件。这样,视图不直接依赖于模型。
答案 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;
}
}