Voici ce que je me suis retrouvé dans mon projet (et je dois dire qu'il a fallu un certain temps de tester différentes choses qui semblaient presque le travail). Vous pouvez voir le code commenté qui ne fonctionnait pas 100% ne me souviens pas pourquoi)
Donc, toutes mes images de l'actif de l'application qui commencent par "ms-appx:" J'utilise avec le réglage de la source sans charger le flux , parce que ceux-ci ne changent jamais (images par défaut, etc)
Les autres images qui ont été créées ou modifiées par l'utilisateur, j'ai dû recharger et définir la source avec le résultat de la lecture du fichier (sinon, quand ils ont été changés parfois ils ne l'étaient pas mise à jour)
Donc, fondamentalement, j'utilise ce convertisseur sur presque tous les endroits où j'utilise des images qui peuvent changer (sans changer leur nom).
définissent votre convertisseur: (. Une autre solution consiste à nommer différemment et vos images lorsque vous mettez à jour le chemin source, il fonctionne très bien)
<converters:ImageConverter x:Key="ImageConverter" />
Et puis utiliser comme cette
<Image Source="{Binding PictureFilename, Converter={StaticResource ImageConverter}}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
public class ImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
try
{
var CapturedImage = new BitmapImage();
CapturedImage.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
if (((string)value).StartsWith("ms-appx:"))
{
CapturedImage.UriSource = new Uri((string)value, UriKind.RelativeOrAbsolute);
return CapturedImage;
}
var file = (StorageFile.GetFileFromPathAsync(new Uri((string)value, UriKind.RelativeOrAbsolute).LocalPath).AsTask().Result);
using (IRandomAccessStream fileStream = file.OpenAsync(FileAccessMode.Read).AsTask().Result)
{
CapturedImage.SetSource(fileStream);
return CapturedImage;
}
}
catch (Exception e)
{
Logger.Error("Exception in the image converter!", e);
return new BitmapImage();
}
//BitmapImage img = null;
//if (value is string)
//{
// img = new BitmapImage();
// img.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
// img.UriSource = new Uri((string)value, UriKind.RelativeOrAbsolute);
//}
//if (value is Uri)
//{
// img = new BitmapImage();
// img.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
// img = new BitmapImage((Uri)value);
//}
//return img;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
Probablement, vous devez implémenter INotifyPropertyChanged pour notifier la vue à propos des modifications. Quel modèle MVVM utilisez-vous? – marcinax
Avez-vous implémenté INotifyPropertyChanged? – Lennart
NotifyPropertyChanged vous pensez? Oui je l'ai .. ou tu penses autre chose? – esispaned