如何从同一WPF DataGrid中的两个输入列获取Total colum值

时间:2016-12-21 06:28:24

标签: c# wpf

如何计算两个输入列值以在运行时中显示同一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) { }

1 个答案:

答案 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