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