/// <summary>
        /// Quando lavoro con una singola foto, se vado sullo schermo del pubblico,
        /// devo fare vedere la foto più bella che ho (cioè quella grande)
        /// Il problema è che la foto grande, potrebbe ancora non essere stata calcolata
        /// </summary>
        /// <param name="fotografia"></param>
        ///
        public void eseguiSnapshotSuFinestraPubblica(Fotografia fotografia, bool forzaAperturaWin)
        {
            // Se la finestra è chiusa e il flag non mi forza l'apertura non faccio niente
            if (!forzaAperturaWin && _snapshotPubblicoWindow == null)
            {
                return;
            }

            FotoDisposeUtils.Instance().DisposeFotografia(fotografia);

            IdrataTarget quale = AiutanteFoto.qualeImmagineDaStampare(fotografia);

            AiutanteFoto.idrataImmagineDaStampare(fotografia);

            IImmagine immagine = AiutanteFoto.getImmagineFoto(fotografia, quale);

            forseApriSnapshotPubblicoWindow();

            snapshotPubblicoViewModel.snapshotImageSource = ((ImmagineWic)immagine).bitmapSource;
        }
        private void viewFotoFullScreen()
        {
            // Qui devo capire quale foto verrà idratata
            IdrataTarget quale = AiutanteFoto.qualeImmagineDaStampare(singolaFotoTarget);

            // Qui idrato
            AiutanteFoto.idrataImmagineDaStampare(singolaFotoTarget);

            // Qui ricavo la foto
            IImmagine img         = AiutanteFoto.getImmagineFoto(singolaFotoTarget, quale);
            var       imageSource = ((ImmagineWic)img).bitmapSource as ImageSource;

            // Qui passo la foto al viewmodel che la deve visualizzare
            PanAndZoomViewModel panZommViewModel = new PanAndZoomViewModel(imageSource);

            // TODO anti-pattern : aprire finestre nel WiewModel.
            //		usare openPopupDialogRequest come già fatto per associazione faccia fotografo
            PanAndZoomWindow w = new Digiphoto.Lumen.UI.PanAndZoom.PanAndZoomWindow();

            w.DataContext = panZommViewModel;
            w.ShowDialog();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="values">Un array di oggetti cosi: composto:</br>
        ///   indice = 0 : un oggetto Fotografia
        ///   indice = 1 : un viewModel (o una qualsiasi classe) che implementi l'interfaccia IContenitoreGriglia
        /// </param>
        /// <param name="targetType"></param>
        /// <param name="parameter"></param>
        /// <param name="culture"></param>
        /// <returns>una ImageSource</returns>
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            ImageSource imageSource = null;

            try {
                Fotografia          fotografia           = (Fotografia)values[0];
                IContenitoreGriglia vmContenitoreGriglia = (IContenitoreGriglia)values[1];

                IdrataTarget quale;

                // Se sto visualizzando una sola foto, oppure due affiancate su di una riga .... scelgo alta qualita
                if (vmContenitoreGriglia != null &&
                    richiedeAltaQualita(vmContenitoreGriglia.numRighe, vmContenitoreGriglia.numColonne))
                {
                    // ALTA QUALITA (più lento)
                    quale = AiutanteFoto.qualeImmagineDaStampare(fotografia);
                    AiutanteFoto.idrataImmagineDaStampare(fotografia);
                }
                else
                {
                    // BASSA QUALITA (più veloce)
                    quale = IdrataTarget.Provino;
                }


                IImmagine immagine = AiutanteFoto.getImmagineFoto(fotografia, quale);
                if (immagine != null)
                {
                    imageSource = ((ImmagineWic)immagine).bitmapSource as ImageSource;
                }
            } catch (Exception ee) {
                _giornale.Error("estrazione immagine fallita", ee);
                // Alcune immagini possono essere rovinate o mancanti. Devo proseguire.
                imageSource = null;
            }

            return(imageSource);
        }