C# 将控件事件绑定到代码事件/命令/方法

C# 将控件事件绑定到代码事件/命令/方法,c#,wpf,events,datagrid,event-binding,C#,Wpf,Events,Datagrid,Event Binding,我有一个datagrid,每当gui中任何单元格中的值发生变化时,我都会更新视图模型中的其他属性 我已经看到了,但我想知道是否可以通过绑定一个事件来完成,例如SourceUpdated或CurrentCellChanged,如下所示: (视图) 但是,当我尝试启动它时,它会抛出一个错误: InvalidCastException:无法强制转换类型为的对象 “System.Reflection.RuntimeEventInfo”以键入 “System.Reflection.MethodInfo”

我有一个datagrid,每当gui中任何单元格中的值发生变化时,我都会更新视图模型中的其他属性

我已经看到了,但我想知道是否可以通过绑定一个事件来完成,例如
SourceUpdated
CurrentCellChanged
,如下所示:

(视图)

但是,当我尝试启动它时,它会抛出一个错误:

InvalidCastException:无法强制转换类型为的对象 “System.Reflection.RuntimeEventInfo”以键入 “System.Reflection.MethodInfo”

有办法做到这一点吗

<DataGrid ItemsSource="{Binding Terrain, Mode=TwoWay, NotifyOnSourceUpdated=True}" 
          Grid.Column="0" Grid.Row="15" Grid.ColumnSpan="1" 
          AutoGenerateColumns="True"
          CanUserAddRows="True" 
          CanUserDeleteRows="True"
          SourceUpdated="{Binding TerrainChangedEvent }" Margin="0,6,0,20" Grid.RowSpan="2"/>
public EventHandler<EventArgs> TerrainChangedEvent;
public ObservableCollection<TerrainSpec> Terrain
{
    get { return _terrain; }
    set { _terrain = value; ReCalcOtherProperty();  RaisePropertyChanged(nameof(Terrain));
}

public TerrainViewModel()
{
    Terrain = new ObservableCollection<TerrainSpec>()
    TerrainChangedEvent += RaiseTerrainChanged;
}
private void RaiseTerrainChanged(object sender, EventArgs e)
{
    ReCalcOtherProperty();
    RaisePropertyChanged(nameof(Terrain));
}
public class TerrainSpec : INotifyPropertyChanged
{
    private double _height;
    private double _distance;

    public double Distance
    {
        get { return _distance; }
        set { _distance = value; RaisePropertyChanged(nameof(Distance)); }
    }
    public double Height
    {
        get { return _height; }
        set { _height = value; RaisePropertyChanged(nameof(Height)); }
    }

    public override string ToString()
    {
        return $"{Distance:F2} m, {Height:F2} m";
    }

    #region PropertyChanged
    public event PropertyChangedEventHandler PropertyChanged;
    protected void RaisePropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    #endregion
}