using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; namespace DevComponents.Schedule.Model { /// /// Defines a working day. /// public abstract class BaseWorkDay : INotifyPropertyChanged, INotifySubPropertyChanged { #region Internal Implementation protected WorkTime _WorkStartTime = new WorkTime(8, 0); /// /// Gets or sets the work start time. /// public WorkTime WorkStartTime { get { return _WorkStartTime; } set { WorkTime oldValue = _WorkStartTime; _WorkStartTime = value; OnWorkStartTimeChanged(oldValue, value); } } /// /// Called when WorkStartTime has changed. /// /// Old property value. /// New property value. protected virtual void OnWorkStartTimeChanged(WorkTime oldValue, WorkTime newValue) { OnPropertyChanged(new PropertyChangedEventArgs("WorkStartTime")); } protected WorkTime _WorkEndTime = new WorkTime(17, 0); /// /// Gets or sets the work end time. /// public WorkTime WorkEndTime { get { return _WorkEndTime; } set { WorkTime oldValue = _WorkEndTime; _WorkEndTime = value; OnWorkEndTimeChanged(oldValue, value); } } /// /// Called when WorkEndTime has changed. /// /// Old property value. /// New property value. protected virtual void OnWorkEndTimeChanged(WorkTime oldValue, WorkTime newValue) { OnPropertyChanged(new PropertyChangedEventArgs("WorkEndTime")); } private CalendarModel _Calendar = null; /// /// Gets the calendar work day is associated with. /// [Browsable(false)] public CalendarModel Calendar { get { return _Calendar; } internal set { if (_Calendar != value) { _Calendar = value; } } } #endregion #region INotifyPropertyChanged Members /// /// Occurs when property value has changed. /// public event PropertyChangedEventHandler PropertyChanged; /// /// Raises the PropertyChanged event. /// /// Event arguments protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) { PropertyChangedEventHandler eh = PropertyChanged; if (eh != null) eh(this, e); OnSubPropertyChanged(new SubPropertyChangedEventArgs(this, e)); } #endregion #region INotifySubPropertyChanged Members /// /// Occurs when property or property of child objects has changed. This event is similar to PropertyChanged event with key /// difference that it occurs for the property changed of child objects as well. /// public event SubPropertyChangedEventHandler SubPropertyChanged; /// /// Raises the SubPropertyChanged event. /// /// Event arguments protected virtual void OnSubPropertyChanged(SubPropertyChangedEventArgs e) { SubPropertyChangedEventHandler eh = SubPropertyChanged; if (eh != null) eh(this, e); } #endregion } }