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;
});
}