BeatMachine.ViewModel.SongsViewModel.SongsViewModel C# (CSharp) Method

SongsViewModel() public method

public SongsViewModel ( IMessenger messenger ) : System
messenger IMessenger
return System
        public SongsViewModel(IMessenger messenger)
            : base(messenger)
        {
            ////if (IsInDesignMode)
            ////{
            ////    // Code runs in Blend --> create design time data.
            ////}
            ////else
            ////{
            ////    // Code runs "for real"
            ////}

            Songs = new ObservableCollection<Group<AnalyzedSong>>();
            songsKeys = new Dictionary<int, Group<AnalyzedSong>>();

            MessengerInstance.Register<SongGroupMessage>(
                this,
                m =>
                {
                    foreach (Group<AnalyzedSong> updatedGroup in m.Songs)
                    {
                        Group<AnalyzedSong> oldGroup = null;
                        bool addUpdatedGroup = true;
                        int insertIndex = Songs.Count; // by default insert at the end
                        if (songsKeys.TryGetValue(updatedGroup.Key, out oldGroup))
                        {
                            if (oldGroup.Items.Count != updatedGroup.Items.Count)
                            {
                                DispatcherHelper.CheckBeginInvokeOnUI(() =>
                                {
                                    insertIndex = Songs.IndexOf(oldGroup);
                                    Songs.Remove(oldGroup);
                                });
                            } else {
                                addUpdatedGroup = false;
                            }
                        }
                        if (addUpdatedGroup){
                            songsKeys[updatedGroup.Key] = updatedGroup;
                            DispatcherHelper.CheckBeginInvokeOnUI(() => {
                                Songs.Insert(insertIndex, updatedGroup);
                            });
                        }

                    }

                    cache = m.Cache;
                });

            MessengerInstance.Register<SongProgressMessage>(
                this,
                (m) =>
                {
                    if (Songs != null && (ActiveSong == null ||
                        ActiveSong.MediaLibrarySong != m.ActiveSong))
                    {
                        if(ActiveSong != null){
                            ActiveSong.Selected = false;
                        }
                        ActiveSong = cache[m.ActiveSong];
                        ActiveSong.Selected = true;
                    }
                    PlayPosition = m.PlayPosition;
                    PlayingNow = m.PlayingNow;
                });
        }
SongsViewModel