C# WPF中数据网格的CellValueChanged事件?
我有一个C# WPF中数据网格的CellValueChanged事件?,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个DataGrid绑定到DataRowView的observeCollectionDataGrid.beginingedit在我开始键入之前被调用CellEditEnding在焦点丢失后调用。我需要一个每当我在单元格上键入时都会触发的事件。我该怎么办 private static ObservableCollection<DataRowView> _dataGridSrcCollection = new ObservableCollection<DataRowView&g
DataGrid
绑定到DataRowView
的observeCollection
DataGrid.beginingedit
在我开始键入之前被调用CellEditEnding
在焦点丢失后调用。我需要一个每当我在单元格上键入时都会触发的事件。我该怎么办
private static ObservableCollection<DataRowView> _dataGridSrcCollection = new ObservableCollection<DataRowView>();
public static ObservableCollection<DataRowView> DataGridSrcCollection
{
get
{
return _dataGridSrcCollection;
}
set
{
if (value != _dataGridSrcCollection)
{
_dataGridSrcCollection = value;
}
}
}
private static observateCollection\u dataGridSrcCollection=new observateCollection();
公共静态ObservableCollection DataGridSrcCollection
{
得到
{
返回_dataGridSrcCollection;
}
设置
{
if(值!=\u dataGridSrcCollection)
{
_dataGridSrcCollection=值;
}
}
}
我正在以编程方式绑定每一列。我怀疑
DataGrid
是否存在任何CellValueChanged
事件,但是假设您的所有数据网格列都是文本列,那么您可以使用TextChanged
事件,如下所示:
Xaml:
首先,由于您说要以编程方式绑定列,因此需要向这些绑定添加
binding.UpdateSourceTrigger=UpdateSourceTrigger.PropertyChanged
然后,您需要订阅集合中每个DataRowView对象的PropertyChanged
事件。为避免松散的事件处理程序,最好的方法是在ObservableCollection的CollectionChanged
事件中,如下所示:
private static ObservableCollection<DataRowView> _dataGridSrcCollection = new ObservableCollection<DataRowView>();
public static ObservableCollection<DataRowView> DataGridSrcCollection
{
get
{
return _dataGridSrcCollection;
}
set
{
if (value != _dataGridSrcCollection)
{
if (_dataGridScrCollection != null)
{
_dataGridScrCollection.CollectionChanged -= DataGridScrCollection_CollectionChanged;
foreach (var row in _dataGridScrCollection)
row.PropertyChanged -= DataRowView_PropertyChanged;
}
if (value != null)
{
value.CollectionChanged += DataGridScrCollection_CollectionChanged;
foreach (var row in value)
row.PropertyChanged += DataRowView_PropertyChanged;
}
_dataGridSrcCollection = value;
}
}
}
private void DataGridScrCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.OldItems != null)
foreach (var item in e.OldItems)
((DataRowView)item).PropertyChanged -= DataRowView_PropertyChanged;
if (e.NewItems != null)
foreach (var item in e.NewItems)
((DataRowView)item).PropertyChanged += DataRowView_PropertyChanged;
}
private void DataRowView_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
// This will be called every time a change is made to any cell
}
private static observateCollection\u dataGridSrcCollection=new observateCollection();
公共静态ObservableCollection DataGridSrcCollection
{
得到
{
返回_dataGridSrcCollection;
}
设置
{
if(值!=\u dataGridSrcCollection)
{
if(_dataGridScrCollection!=null)
{
_dataGridScrCollection.CollectionChanged-=dataGridScrCollection\u CollectionChanged;
foreach(在_dataGridScrCollection中的var行)
row.PropertyChanged-=DataRowView\u PropertyChanged;
}
if(值!=null)
{
value.CollectionChanged+=DataGridScrCollection\u CollectionChanged;
foreach(值中的var行)
row.PropertyChanged+=DataRowView\u PropertyChanged;
}
_dataGridSrcCollection=值;
}
}
}
私有void DataGridScrCollection\u CollectionChanged(对象发送方,notifycollectionchangedventargs e)
{
如果(例如,OldItems!=null)
foreach(e.OldItems中的var项)
((DataRowView)项).PropertyChanged-=DataRowView\u PropertyChanged;
如果(如NewItems!=null)
foreach(e.NewItems中的var项)
((DataRowView)项).PropertyChanged+=DataRowView\u PropertyChanged;
}
私有void DataRowView_PropertyChanged(对象发送方,PropertyChangedEventArgs e)
{
//每当对任何单元格进行更改时,都将调用此函数
}
但单元格的SelectedItem为空。仅当SelectedRow更改时,才会调用SelectedCell的set属性。我在牢房里打字的时候不会。
private void CellValueChanged(object sender, TextChangedEventArgs e)
{
// your code
}
private static ObservableCollection<DataRowView> _dataGridSrcCollection = new ObservableCollection<DataRowView>();
public static ObservableCollection<DataRowView> DataGridSrcCollection
{
get
{
return _dataGridSrcCollection;
}
set
{
if (value != _dataGridSrcCollection)
{
if (_dataGridScrCollection != null)
{
_dataGridScrCollection.CollectionChanged -= DataGridScrCollection_CollectionChanged;
foreach (var row in _dataGridScrCollection)
row.PropertyChanged -= DataRowView_PropertyChanged;
}
if (value != null)
{
value.CollectionChanged += DataGridScrCollection_CollectionChanged;
foreach (var row in value)
row.PropertyChanged += DataRowView_PropertyChanged;
}
_dataGridSrcCollection = value;
}
}
}
private void DataGridScrCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.OldItems != null)
foreach (var item in e.OldItems)
((DataRowView)item).PropertyChanged -= DataRowView_PropertyChanged;
if (e.NewItems != null)
foreach (var item in e.NewItems)
((DataRowView)item).PropertyChanged += DataRowView_PropertyChanged;
}
private void DataRowView_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
// This will be called every time a change is made to any cell
}