动态 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));
}
}
我正在尝试制作一个发票程序,并且我正在尝试以动态方式在 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));
}
}