public CombinedFleet(Homeport parent, params Fleet[] fleets)
{
if (fleets == null || fleets.Length == 0) throw new ArgumentException();
this.Fleets = fleets;
this.State = new FleetState(parent, fleets);
this.CompositeDisposable.Add(this.State);
foreach (var fleet in fleets)
{
this.CompositeDisposable.Add(new PropertyChangedEventListener(fleet)
{
{ "Name", (sender, args) => this.UpdateName() },
});
var source = fleet;
this.CompositeDisposable.Add(new LivetWeakEventListener<EventHandler, EventArgs>(
h => new EventHandler(h),
h => source.State.Updated += h,
h => source.State.Updated -= h,
(sender, args) => this.State.Update()));
this.CompositeDisposable.Add(new LivetWeakEventListener<EventHandler, EventArgs>(
h => new EventHandler(h),
h => source.State.Calculated += h,
h => source.State.Calculated -= h,
(sender, args) => this.State.Calculate()));
}
this.UpdateName();
this.State.Calculate();
this.State.Update();
}