das Problem mit der Antwort, die hier gewählt wurde, ist, dass Beim Navigieren hin und her wird der Konverter kommen wird jedes Mal ausgelöst, wenn die Seite angezeigt wird.
Dies führt dazu, dass neue Datei-Handles kontinuierlich erstellt werden und jeden Versuch blockieren, die Datei zu löschen, da sie noch verwendet wird. Dies kann mit dem Process Explorer überprüft werden.
Wenn die Bilddatei kann zu einem bestimmten Zeitpunkt gelöscht werden, ein Konverter wie diese verwendet werden könnten: using XAML to bind to a System.Drawing.Image into a System.Windows.Image control
Der Nachteil bei dieser Methode Speicherstrom ist, dass das Bild (n) geladen werden und decodiert jedes Mal, und kein Caching stattfinden kann: „Um Bilder zu verhindern, dass mehr als einmal decodiert wird, weisen die Image.Source Eigenschaft von einem Uri anstatt Speicher mit Hilfe von Streams“ Quelle: „Performance-Tipps für Windows-Store-Anwendungen mithilfe von XAML“
Um das Leistungsproblem zu lösen, kann das Repository-Muster verwendet werden, um eine Cache-Schicht bereitzustellen. Das Zwischenspeichern kann im Speicher stattfinden, was zu Speicherproblemen führen kann, oder als Thumbnail-Dateien, die sich in einem temporären Ordner befinden, der beim Beenden der App gelöscht werden kann.
(Tatsächlich erzeugt der Typkonverter kein 'BitmapImage', sondern eine andere Unterklasse von' ImageSource': 'BitmapFrameDecode', was intern ist.) –
@ H.B. Wie würden Sie zurück konvertieren, wenn Sie die Änderung des Bildes beibehalten möchten? – Igor
Alternative zu einem Konverter: Machen Sie Ihre Eigenschaft, an die Sie binden (hier: 'ImageSource') vom Typ' Uri' oder 'BitmapImage', und geben Sie sie dort ein. Wenn Sie mit möglichen 'Null'-Werten umgehen müssen (Cast fehlgeschlagen usw.), fügen Sie 'TargetNullValue = {x: Null}' zu Ihrer Bindung hinzu. – Gerrit