112 lines
2.5 KiB
C#
112 lines
2.5 KiB
C#
|
using System;
|
|||
|
using System.ComponentModel;
|
|||
|
|
|||
|
namespace TipCalc
|
|||
|
{
|
|||
|
class TipCalcModel : INotifyPropertyChanged
|
|||
|
{
|
|||
|
double subTotal, postTaxTotal, tipPercent, tipAmount, total;
|
|||
|
|
|||
|
public event PropertyChangedEventHandler PropertyChanged;
|
|||
|
|
|||
|
public double SubTotal
|
|||
|
{
|
|||
|
set
|
|||
|
{
|
|||
|
if (subTotal != value)
|
|||
|
{
|
|||
|
subTotal = value;
|
|||
|
OnPropertyChanged("SubTotal");
|
|||
|
Recalculate();
|
|||
|
}
|
|||
|
}
|
|||
|
get
|
|||
|
{
|
|||
|
return subTotal;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public double PostTaxTotal
|
|||
|
{
|
|||
|
set
|
|||
|
{
|
|||
|
if (postTaxTotal != value)
|
|||
|
{
|
|||
|
postTaxTotal = value;
|
|||
|
OnPropertyChanged("PostTaxTotal");
|
|||
|
Recalculate();
|
|||
|
}
|
|||
|
}
|
|||
|
get
|
|||
|
{
|
|||
|
return postTaxTotal;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public double TipPercent
|
|||
|
{
|
|||
|
set
|
|||
|
{
|
|||
|
if (tipPercent != value)
|
|||
|
{
|
|||
|
tipPercent = value;
|
|||
|
OnPropertyChanged("TipPercent");
|
|||
|
Recalculate();
|
|||
|
}
|
|||
|
}
|
|||
|
get
|
|||
|
{
|
|||
|
return tipPercent;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public double TipAmount
|
|||
|
{
|
|||
|
set
|
|||
|
{
|
|||
|
if (tipAmount != value)
|
|||
|
{
|
|||
|
tipAmount = value;
|
|||
|
OnPropertyChanged("TipAmount");
|
|||
|
}
|
|||
|
}
|
|||
|
get
|
|||
|
{
|
|||
|
return tipAmount;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public double Total
|
|||
|
{
|
|||
|
set
|
|||
|
{
|
|||
|
if (total != value)
|
|||
|
{
|
|||
|
total = value;
|
|||
|
OnPropertyChanged("Total");
|
|||
|
}
|
|||
|
}
|
|||
|
get
|
|||
|
{
|
|||
|
return total;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void Recalculate()
|
|||
|
{
|
|||
|
this.TipAmount = Math.Round(this.TipPercent * this.SubTotal / 100, 2);
|
|||
|
|
|||
|
// Round total to nearest quarter.
|
|||
|
this.Total = Math.Round(4 * (this.PostTaxTotal + this.TipAmount)) / 4;
|
|||
|
}
|
|||
|
|
|||
|
protected void OnPropertyChanged(string propertyName)
|
|||
|
{
|
|||
|
if (PropertyChanged != null)
|
|||
|
{
|
|||
|
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|