private void DbClasses_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { DbHelper.Instance.IsChanged = true; if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) { if (sender is ObservableCollection <Player> ) { PlayersById.Add(((Player)e.NewItems[0]).Id, (Player)e.NewItems[0]); m_Logger.Debug("Added a player: " + (Player)e.NewItems[0]); NotifyPropertyChanged("PlayersSorted"); } else if (sender is ObservableCollection <GameFamily> ) { GameFamiliesById.Add(((GameFamily)e.NewItems[0]).Id, (GameFamily)e.NewItems[0]); m_Logger.Debug("Added a game family: " + (GameFamily)e.NewItems[0]); NotifyPropertyChanged("GameFamiliesFiltered"); } else if (sender is ObservableCollection <Location> ) { LocationsById.Add(((Location)e.NewItems[0]).Id, (Location)e.NewItems[0]); m_Logger.Debug("Added a Location: " + (Location)e.NewItems[0]); NotifyPropertyChanged("LocationsSorted"); } else if (sender is ObservableCollection <Game> ) { GamesById.Add(((Game)e.NewItems[0]).Id, (Game)e.NewItems[0]); m_Logger.Debug("Added a Game: " + (Game)e.NewItems[0]); NotifyPropertyChanged("GamesPointBased"); NotifyPropertyChanged("GamesSorted"); } else if (sender is ObservableCollection <Result> ) { Result v_Result = (Result)e.NewItems[0]; // Hooking up the notifications for the new object. v_Result.PropertyChanged += Result_PropertyChanged; foreach (Score i_Score in v_Result.Scores) { i_Score.PropertyChanged += Result_PropertyChanged; } NotifyPropertyChanged("ResultsOrdered"); } else { throw new NotImplementedException(String.Format("Adding of [{0}] is not supported.", sender.GetType())); } } else if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove) { if (sender is ObservableCollection <Player> ) { PlayersById.Remove(((Player)e.OldItems[0]).Id); NotifyPropertyChanged("PlayersSorted"); } else if (sender is ObservableCollection <GameFamily> ) { GameFamiliesById.Remove(((GameFamily)e.OldItems[0]).Id); NotifyPropertyChanged("GameFamiliesFiltered"); } else if (sender is ObservableCollection <Location> ) { LocationsById.Remove(((Location)e.OldItems[0]).Id); NotifyPropertyChanged("LocationsSorted"); } else if (sender is ObservableCollection <Game> ) { GamesById.Remove(((Game)e.OldItems[0]).Id); NotifyPropertyChanged("GamesPointBased"); NotifyPropertyChanged("GamesSorted"); } else if (sender is ObservableCollection <Result> ) { NotifyPropertyChanged("ResultsOrdered"); } else { throw new NotImplementedException(String.Format("Removing of [{0}] is not supported.", sender.GetType())); } } else if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Reset) { m_Logger.Debug("Resetting collection for [" + sender.GetType() + "]."); if (sender is ObservableCollection <Player> ) { PlayersById.Clear(); NotifyPropertyChanged("PlayersSorted"); } else if (sender is ObservableCollection <GameFamily> ) { GameFamiliesById.Clear(); NotifyPropertyChanged("GameFamiliesFiltered"); } else if (sender is ObservableCollection <Location> ) { LocationsById.Clear(); NotifyPropertyChanged("LocationsSorted"); } else if (sender is ObservableCollection <Game> ) { GamesById.Clear(); NotifyPropertyChanged("GamesPointBased"); NotifyPropertyChanged("GamesSorted"); } else if (sender is ObservableCollection <Result> ) { NotifyPropertyChanged("ResultsOrdered"); } else { throw new NotImplementedException(String.Format("Resetting of [{0}] is not supported.", sender.GetType())); } } else { throw new NotImplementedException(String.Format("Action {0} not supported on collection.", e.Action)); } }