private void OnSatellite_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == "Attenuation" && AttenuationsLinked && !suppressLinkedAttenuationChange) { SatelliteDefinition satellite = (SatelliteDefinition)sender; if (satellite.IsEnabled) { suppressLinkedAttenuationChange = true; LinkedAttenuation = satellite.Attenuation; foreach (SatelliteDefinition item in Satellites.Where(delegate(SatelliteDefinition s) { if (s != satellite) { return(s.IsEnabled); } return(false); })) { item.Attenuation = LinkedAttenuation; } Application.Current.Dispatcher.BeginInvoke((Action) delegate { suppressLinkedAttenuationChange = false; }, DispatcherPriority.DataBind); } } }
private void UpdateVisibleSatellites() { IEnumerable <SatelliteBase> source = simulation.VisibleSats[constellation.ConstellationType]; foreach (SatelliteBase item in from s in source where !(from ss in Satellites select ss.Id).Contains(s.Id) select s) { SatelliteDefinition satelliteDefinition = new SatelliteDefinition(item, simulation.SimulationParameters, this); int i; for (i = 0; i < Satellites.Count && item.Id > Satellites[i].Id; i++) { } Satellites.Insert(i, satelliteDefinition); satelliteDefinition.PropertyChanged += OnSatellite_PropertyChanged; } SatelliteDefinition[] array = Satellites.ToArray(); foreach (SatelliteDefinition satDef in array) { SatelliteBase satelliteBase = source.FirstOrDefault((SatelliteBase s) => s.Id == satDef.Id); if (satelliteBase != null) { if (simulation.SimulationParameters.SatCountLimitMode != 0) { satDef.IsEnabled = satelliteBase.IsEnabled; } } else { satDef.PropertyChanged -= OnSatellite_PropertyChanged; Satellites.Remove(satDef); } } SatelliteCount = (constellation.IsEnabled ? (from s in Satellites where s.IsEnabled select s).Count() : 0); }