我正在尝试制作发票程序,并且试图在DataGrid
内部以动态方式显示对象。该对象只有一列具有“名称”,多余的列如tax%,折扣%和金额。(作为xceed Toolkit中的IntegerUpDown
)。
现在我需要的是另一列,该列将通过取每个产品的价格(原始对象的一部分),乘以金额,加税,并除去折扣%来显示总价格。
我已经看到许多实现,但是我无法理解其背后的逻辑。我将创建一个具有所需属性(名称,价格)和某些函数(例如“ total_Price”和事件PropertyChangedEventHandler的对象)的对象(项目)?但是,我将如何连接同一行的“税”,“折扣”?如果我将它们添加到对象Item中并因此能够引用它们,那么我将如何通过DataGrid
来操纵它们。如果我在那里更改它们(通过DataGrid
按钮在IntegerUpDown
处,它们会在实际对象中更改吗?
我对wpf真的很陌生,尤其是对于数据模板和东西,因此我无法真正理解它的逻辑!提示至少对我如何开始很有帮助!
答案 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));
}
}