public CDAlbumDescriptorCreatorViewModel(AmbigueousCDInformationArgs cadi, IMusicSession session)
        {
            _CADI = cadi;
            _Session = session;

            _CDInfos.AddCollection(_CADI.CDInfos);

            _Authours = new ObservableCollection<IArtist>();
            _Authours.CollectionChanged += _Authours_CollectionChanged;

            if (CDInfos.Count == 0)
            {
                Created = Default.GetEditable();
            }
            else if (CDInfos.Count == 1)
            {
                Created = CDInfos[0].FindItem.GetEditable();
            }

            _ArtistSearchableFactory = new ArtistSearchableFactory(_Session);  
            
            GenreFactory = FactoryBuilder.Instanciate((n) => _Session.GetGenreFactory().Create(n));

            CommitCommand = RelayCommand.Instanciate(() => OnCommintCommand());

            InternetFind = RelayCommand.InstanciateAsync(() => FindAdditionalInfoFromWebAsync());

            iTunesFind = RelayCommand.InstanciateAsync(() => FindAdditionalInfoFromiTunesAsync());
        }
 private MusicEntitiesEditorViewModel(IMusicSession session)
 {
     _IMS = session;
     ArtistSearchableFactory = new ArtistSearchableFactory(session);
     
     Genres = Register( _IMS.AllGenres.LiveOrderBy(global => global.FullName));
     Commit = RelayCommand.Instanciate(DoCommit);
     GenreFactory = FactoryBuilder.Instanciate((n) => session.GetGenreFactory().Create(n));
     YearFactory = FactoryBuilder.Instanciate((n) => { int res = 0; int.TryParse(n, out res); return res; });
     NameFactory = FactoryBuilder.Instanciate((n) => n);
 }
        public AlbumEditorViewModel(IMusicSession iMusicSession, IModifiableAlbum iModifiableAlbum)
        {
            _IModifiableAlbum = iModifiableAlbum;
            _Session = iMusicSession;

            ArtistSearchableFactory = new ArtistSearchableFactory(iMusicSession);

            GenreFactory = FactoryBuilder.Instanciate((n) => iMusicSession.GetGenreFactory().Create(n));

            Images = _IModifiableAlbum.Images;
            SelectedImages = new WrappedObservableCollection<IAlbumPicture>();
            

            if (Images.Count > 0)
                SelectedImage = Images[0];

            Images.CollectionChanged += Images_CollectionChanged;
                
            SelectedTracks = new WrappedObservableCollection<IModifiableTrack>();

            Authours = _IModifiableAlbum.Artists;
            _Genre = iMusicSession.GetGenreFactory().Get(_IModifiableAlbum.Genre);
            Genres = Register(iMusicSession.AllGenres.LiveOrderBy(global => global.FullName));

            Tracks = new WrappedObservableCollection<IModifiableTrack>(_IModifiableAlbum.Tracks.
                OrderBy(t => t.DiscNumber).ThenBy(t => t.TrackNumber).ThenBy(t => t.Name));

            SetFrontCover = Register(RelayCommand.Instanciate<IAlbumPicture>(SetToFront, ial => (ial != null) && Images.IndexOf(ial) > 0));
            ToLast = Register(RelayCommand.Instanciate<IAlbumPicture>(SetToLast, ial => (ial != null) && Images.IndexOf(ial) != Images.Count - 1));

            SplitImage = Register(RelayCommand.Instanciate<IAlbumPicture>(DoSplitImage, ial => ial != null));
            RotateImageRight = Register(RelayCommand.Instanciate<IAlbumPicture>((al)=>DoRotateImage(al,true), ial => ial != null));
            RotateImageLeft = Register(RelayCommand.Instanciate<IAlbumPicture>((al) => DoRotateImage(al, false), ial => ial != null));
            DeleteImage = Register(RelayCommand.Instanciate<IAlbumPicture>(DoDeleteImage, ial => ial != null));
            ImageFromFile = RelayCommand.Instanciate(DoImageFromFile);
            PasteImage = RelayCommand.InstanciateStatic(DoPasteImage, CanExecuteImage);

            DeleteTrack = Register(RelayCommand.Instanciate<IModifiableTrack>(DoDeleteTrack, ial => ial != null));
            WindowOpenTrack = Register(RelayCommand.Instanciate<IModifiableTrack>(DoWindowOpenTrack, ial => ial != null));
            UpdateFromFileName = Register(RelayCommand.Instanciate<IModifiableTrack>(DoUpdateFromFileName, ial => ial != null));
            RemoveTrackNumber= Register(RelayCommand.Instanciate<IModifiableTrack>(DoRemoveTrackNumber, ial => ial != null));
            PreFixByArtistName = Register(RelayCommand.Instanciate<IModifiableTrack>(DoPreFixByArtistName, ial => ial != null));
            ChangeDiscNumber = Register(RelayCommand.Instanciate<IModifiableTrack>(DoChangeDiscNumber, ial => ial != null));

            FindFromDB = RelayCommand.Instanciate(DoFindFromInternet);
            BrowseInternet = RelayCommand.Instanciate(FindOnInternet);
            OK = RelayCommand.Instanciate(DoCommit);
        }