1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| public class ShippingModel : INotifyPropertyChanged
{
private ObservableCollection<DeliveryDay> _days;
public ObservableCollection<DeliveryDay> Days
{
get { return _days; }
set
{
_days = value;
if(PropertyChanged!=null)
PropertyChanged(this, new PropertyChangedEventArgs("Days"));
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
public class ShippingView
{
private ShippingModel model;
public ShippingView(ShippingModel model)
{
this.model = model;
model.PropertyChanged += new PropertyChangedEventHandler(model_PropertyChanged);
}
void model_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
AvailableDays = new ObservableCollection<DeliveryDay>();
for (int i = 0; i < 7; i++)
{
var day = model.Days.FirstOrDefault(y => y.Day == i) ??
new DeliveryDay
{
Day = i,
IsDeliveryPossible = false,
};
day.DeliveryPossibleChanged += new EventHandler(day_DeliveryPossibleChanged);
AvailableDays.Add(day);
}
}
void day_DeliveryPossibleChanged(object sender, EventArgs e)
{
if (DeliveryDayChanged != null)
DeliveryDayChanged(this, new DeliveryDayEventArgs(sender as DeliveryDay));
}
public ObservableCollection<DeliveryDay> AvailableDays { get; set; }
public event EventHandler<DeliveryDayEventArgs> DeliveryDayChanged;
}
public class DeliveryDayEventArgs :EventArgs
{
public DeliveryDayEventArgs(DeliveryDay deliveryDay)
{
DeliveryDay = deliveryDay;
}
public DeliveryDay DeliveryDay { get; set; }
}
public class ShippingController
{
private ShippingModel model;
public ShippingController(ShippingModel model)
{
this.model = model;
View = new ShippingView(model);
View.DeliveryDayChanged += new EventHandler<DeliveryDayEventArgs>(View_DeliveryDayChanged);
}
void View_DeliveryDayChanged(object sender, DeliveryDayEventArgs e)
{
DeliveryDay day = e.DeliveryDay;
if (day.IsDeliveryPossible)
model.Days.Add(day);
else
model.Days.Remove(day);
}
public ShippingView View { get; private set; }
} |
Partager