动态WPF Datagrid。计算功能列逻辑

时间:2018-07-12 09:12:51

标签: c# wpf datagrid datagridcolumn

我正在尝试制作发票程序,并且试图在DataGrid内部以动态方式显示对象。该对象只有一列具有“名称”,多余的列如tax%,折扣%和金额。(作为xceed Toolkit中的IntegerUpDown)。

现在我需要的是另一列,该列将通过取每个产品的价格(原始对象的一部分),乘以金额,加税,并除去折扣%来显示总价格。

我已经看到许多实现,但是我无法理解其背后的逻辑。我将创建一个具有所需属性(名称,价格)和某些函数(例如“ total_Price”和事件PropertyChangedEventHandler的对象)的对象(项目)?但是,我将如何连接同一行的“税”,“折扣”?如果我将它们添加到对象Item中并因此能够引用它们,那么我将如何通过DataGrid来操纵它们。如果我在那里更改它们(通过DataGrid按钮在IntegerUpDown处,它们会在实际对象中更改吗?

我对wpf真的很陌生,尤其是对于数据模板和东西,因此我无法真正理解它的逻辑!提示至少对我如何开始很有帮助!

1 个答案:

答案 0 :(得分:1)

您可以在数据类中添加一个只读属性,以返回计算出的总价。每当其他任何属性发生更改时,请不要忘记实现INotifyPropertyChanged接口来为此属性引发PropertyChanged事件:

public class Invoice
{
    public string Name { get; set; }

    private double _price;
    public double Price
    {
        get { return _price; }
        set { _price = value; NotifyPropertyChanged(nameof(TotalPrice)); }
    }

    private double _tax;
    public double Tax
    {
        get { return _tax; }
        set { _tax = value; NotifyPropertyChanged(nameof(TotalPrice)); }
    }

    private double _discount;
    public double Discount
    {
        get { return _discount; }
        set { _discount = value; NotifyPropertyChanged(nameof(TotalPrice)); }
    }

    private double _amount;
    public double Amount
    {
        get { return _amount; }
        set { _amount = value; NotifyPropertyChanged(nameof(TotalPrice)); }
    }

    public double TotalPrice
    {
        get
        {
            return (_price * _amount + _tax) * (1 - _discount);
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}