动态 WPF 数据网格。计算函数列逻辑

Dynamic WPF Datagrid. Calculate function column logic

我正在尝试制作一个发票程序,并且我正在尝试以动态方式在 DataGrid 中显示对象。对象只有一列 "Name",还有额外的列,如税费、折扣百分比和金额。(作为来自 xceed 工具包的 IntegerUpDown)。

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

我看过很多实现,但我无法理解其背后的逻辑。我将创建一个对象 (Item),其中包含我需要的属性(名称、价格)和一些函数,例如 "total_Price" 和事件 PropertyChangedEventHandler?但是我如何才能连接同一行的 "tax" , "discount" ?如果我将它们添加到对象 Item 中并因此能够引用它们,我将如何能够通过 DataGrid 来操作它们。如果我在那里更改它们(在 DataGrid 处通过 IntegerUpDown 按钮),它们会在实际对象中更改吗?

我对 wpf 非常陌生,尤其是数据模板和其他东西,所以我真的无法理解它的逻辑!至少可以提示我如何开始!

您可以将只读 属性 添加到您的数据 class 以 returns 计算总价。不要忘记实现 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));
    }
}