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