Hallo,
ich habe hier eine UWP-App, die in einer GridView Bilder anzeigt, die aus dem Netz heruntergeladen werden. Bisher mache ich das so, dass es pro Bild die Instanz einer Klasse gibt, die folgende Eigenschaft enthält:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| private BitmapImage image = null; public BitmapImage Image { get { if (image == null) { image = new BitmapImage(new Uri(Url)); } return image; } } |
Im XAML-Code ist jeweils eine Instanz der Klasse dann der DataContext für einen Listeneintrag und ich kann die Source-Eigenschaft einer Image-Komponente an die obige Image-Eigenschaft binden. Das funktioniert wunderbar und während der Laufzeit der App wird jedes Bild nur genau einmal heruntergeladen.
Da diese Liste an Bildern im Netz aber über lange Zeiten unverändert bleibt (und höchstens erweitert wird), macht es Sinn, bereits heruntergeladene Bilder dauerhaft im Cache zu speichern, sodass sie auch beim nächsten Start der App nicht nochmal heruntergeladen werden. Und da ist mein Problem. Da Zugriffe auf das Dateisystem in UWP ja alle asynchron sind, hat die Methode, um ein Bild aus dem Cache zu laden (oder bei Bedarf herunterzuladen), automatisch eine solche Signatur:
C#-Quelltext
1:
| private async Task<BitmapImage> GetCachedImage() |
Die kann ich ja aber nicht im Getter einer Eigenschaft aufrufen, weil der nicht asynchron sein kann. Wie bekomme ich jetzt also möglichst elegant die Bilder ins GridView?
Vielen Dank im Voraus,
viele Grüße
Christian
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".