Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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中数据网格的CellValueChanged事件?_C#_Wpf_Datagrid - Fatal编程技术网

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
}