11 public class Race : ObservableObject, IEquatable<Race>, ICloneable
20 Starts =
new ObservableCollection<PersonStart>();
28 public Race(List<PersonStart> starts)
30 Starts = starts ==
null ? null :
new ObservableCollection<PersonStart>(starts);
38 public Race(ObservableCollection<PersonStart> starts)
49 public Race(
Race other,
bool deepClone =
true) : this()
51 if (other ==
null) {
return; }
60 Starts =
new ObservableCollection<PersonStart>(other.
Starts);
70 #region Basic properties
82 public int Distance =>
Starts?.FirstOrDefault()?.CompetitionObj?.Distance ?? 0;
84 private ObservableCollection<PersonStart> _starts;
89 public ObservableCollection<PersonStart>
Starts
92 set => SetProperty(ref _starts, value);
99 #region Validation properties
132 #region Other properties
142 set => SetProperty(ref _raceID, value);
149 #region Event Handling
151 private void RegisterEvents()
155 Starts.CollectionChanged += Starts_CollectionChanged;
159 start.PropertyChanged += Start_PropertyChanged;
160 start.
CompetitionObj?.PropertyChanged += Competition_PropertyChanged;
165 private void Competition_PropertyChanged(
object sender,
System.ComponentModel.PropertyChangedEventArgs e)
166 => raiseAllPropertyChanged();
168 private void Start_PropertyChanged(
object sender,
System.ComponentModel.PropertyChangedEventArgs e)
169 => raiseAllPropertyChanged();
171 private void Starts_CollectionChanged(
object sender,
System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
172 => raiseAllPropertyChanged();
174 private void raiseAllPropertyChanged()
176 OnPropertyChanged(nameof(
Style));
177 OnPropertyChanged(nameof(
Distance));
181 OnPropertyChanged(nameof(
IsValid));
188 #region Equality, HashCode, ToString, Clone
218 =>
new Race(
this,
true);