Converter pour un Binding d’une image dans l’Isolated Storage

J’avais une liste d’éléments  de type Item auxquels je voulais attribuer une image différente pour chacun. Cette image se trouvait dans l’Isolated Storage dans un dossier spécifique pour chaque et était amenée à changer. Je ne pouvais pas mettre l’uri de ces images directement dans l’objet Item.
Dans le template de ma ListBox, au lieu de faire un binding de la source de mon image vers une uri, j’ai fait un binding vers le nom de mon Item (par exemple, “Bonjour le Chat”) et j’ai utilisé un converter pour aller récupérer l’image correspondante dans l’Isolated Storage.

image

(la ListBox avec les éléments)

J’ai donc créé mon converter avec la méthode Convert(…) suivante et qui retourne une BitmapImage.

public object Convert(object value, Type targetType, 
            object parameter, CultureInfo culture)
        {
            string path = value.ToString() + "/";
            using (IsolatedStorageFile store = 
                IsolatedStorageFile.GetUserStoreForApplication())
            {
                if (String.IsNullOrEmpty(value.ToString()))
                    return null;
                try
                {
                    using (IsolatedStorageFileStream fileStream = 
                        store.OpenFile(path + 
                        store.GetFileNames(path + "*").First(),
                        FileMode.Open, FileAccess.Read))
                    {
                        var img = new BitmapImage();
                        img.SetSource(fileStream);
                        return img;
                    }
                }
                catch (Exception e)
                {
                    return null;
                }

            }
        }

Avec la méthode store.OpenFile(path + store.GetFileNames(path + « * »).First(), FileMode.Open, FileAccess.Read). Je récupère un stream du premier fichier que je trouve dans le dossier recherché.
La méthode OpenFile est d’ailleurs intéressante puisque je lui passe bien sûr mon path, mais il faut que je liste ensuite tous les fichiers du répertoire (d’où le caractère “*”) avant de pouvoir prendre le premier.

Par JC VASSELON

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s