public EditPlaylistViewModel(IViewModelFactory viewModelFactory, IContentManagerService contentManagerService, IPlaylistViewModel playlistViewModel)
        {
            PlaylistViewModel = playlistViewModel;
            DisplayName       = playlistViewModel.Playlist.Name;

            HashSet <Track> playlistTracks = new HashSet <Track>(playlistViewModel.Playlist.Tracks.Select(playlistTrack => playlistTrack.Track));

            TrackSource = viewModelFactory.MakeViewModel <ITrackSinkViewModel>(contentManagerService.RetrieveTracks()
                                                                               .Where(track => !playlistTracks.Contains(track))
                                                                               .Select(track => viewModelFactory.MakeViewModel <ITrackViewModel>(new PlaylistTrack(0, track))),
                                                                               "Plus");
            PlaylistTarget = viewModelFactory.MakeViewModel <ITrackSinkViewModel>(playlistViewModel.Tracks, "Minus");

            EventHandler <TracksReleasedEventArgs> MakeAddTracksEventHandler(ITrackSinkViewModel target)
            {
                return((sender, e) =>
                {
                    target.AddTracks(e.Tracks);
                    ModifiedTrackCountChanged();
                });
            }

            TrackSource.TracksReleased    += MakeAddTracksEventHandler(PlaylistTarget);
            PlaylistTarget.TracksReleased += MakeAddTracksEventHandler(TrackSource);
        }