如何计算两个输入列值以在运行时中显示同一DataGrid中的Total列。哪个事件是计算网格值的最佳事件。请帮帮我。
XAML:
<DataGrid.Columns>
<DataGridTextColumn Header="StudentName" FontWeight="Bold" Width="100"
Binding="{Binding Student}" />
<DataGridTextColumn Header="Subject1" FontWeight="Bold" Width="100"
Binding="{Binding Subject1}" />
<DataGridTextColumn Header="Subject2" FontWeight="Bold" Width="100"
Binding="{Binding Subject2}"/>
<DataGridTextColumn Header="Total" FontWeight="Bold" Width="100"
Binding="{Binding Total}"/>
</DataGrid.Columns>
代码:
private void dgSubject_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) { }
答案 0 :(得分:0)
如果您想使用事件来计算总和,您可能需要检查CellEditEnding
event。但是,在WPF中更好的方法是使用数据绑定,因为它可以更好地控制数据的更新时间,并且可以更好地分离表示和业务代码(这就是MVVM的用途)。
数据绑定意味着您创建一个包含数据的对象并将其与DataGrid
连接。网格将显示对象的信息,并在用户更改网格数据时更新它。它还会自动执行必要的转换。当您的对象实现INotifyPropertyChanged
事件时,DataGrid
也会在您的对象发生更改时更新(无论是谁更改了它:具有编辑的用户或程序代码中的应用程序)。在你的情况下,你需要类似的东西:
class ExampleObject : INotifyPropertyChanged {
private int m_value1;
private int m_value2;
public int Value1 {
get {
return m_value1;
}
set {
if (value != m_value1) {
m_value1 = value;
OnPropertyChanged(new PropertyChangedEventArgs(nameof(Value1));
OnPropertyChanged(new PropertyChangedEventArgs(nameof(Sum));
}
}
}
public int Value2 {
get {
return m_value2;
}
set {
if (value != m_value2) {
m_value2 = value;
OnPropertyChanged(new PropertyChangedEventArgs(nameof(Value2));
OnPropertyChanged(new PropertyChangedEventArgs(nameof(Sum));
}
}
}
public int Sum {
get {
return m_value1 + m_value2;
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
PropertyChanged(this, e);
}
}
}
将数据对象绑定到网格时,它会发现它实现INotifyPropertyChanged
并在编辑值时自动更新。检查this post,了解如何将对象绑定到DataGrid
。