Image UriSource et Liaison de Données
Je suis en train de lier une liste d'objets personnalisés pour WPF Image comme ceci:
<Image>
<Image.Source>
<BitmapImage UriSource="{Binding Path=ImagePath}" />
</Image.Source>
</Image>
Mais ça ne fonctionne pas. C'est l'erreur que je reçois:
"Propriété " UriSource' ou bien 'StreamSource" doit être réglé."
Ce qui me manque?
Vous devez vous connecter pour publier un commentaire.
WPF a convertisseurs intégrés pour certains types. Si vous liez l'Image du
Source
propriété à unstring
ouUri
valeur, sous le capot WPF utilisera un ImageSourceConverter pour convertir la valeur d'uneImageSource
.Donc
si le ImageSource propriété est une représentation sous forme de chaîne d'une URI valide pour une image.
Bien sûr, vous pouvez rouler votre propre convertisseur de Liaison:
et de l'utiliser comme ceci:
BitmapImage
, mais d'un autre sous-classe deImageSource
:BitmapFrameDecode
, qui est à l'intérieur.)ImageSource
) de typeUri
ouBitmapImage
et jeté là. Si vous avez besoin de faire face à d'éventuellesnull
valeurs (exprimées échec etc.) ajouterTargetNullValue={x:Null}
de votre liaison.Cet article par Atul Gupta a un exemple de code qui couvre plusieurs scénarios:
Vous pouvez également simplement mettre l'attribut Source plutôt que d'utiliser les éléments d'enfant. Pour ce faire, vos besoins de la classe pour retourner l'image en tant qu'Image Bitmap. Voici un exemple d'une façon dont je l'ai fait
Et la classe de la propriété est tout simplement ce
Je suppose que cela peut être un peu plus de travail que de la valeur du convertisseur, mais il est une autre option.
Vous avez besoin d'une mise en œuvre de IValueConverter interface qui convertit l'uri dans une image. Votre Convertir de mise en œuvre de IValueConverter va ressembler à quelque chose comme ceci:
Ensuite, vous devrez utiliser le convertisseur dans votre liaison:
Le problème avec la réponse qui a été choisie ici est que lors de la navigation en arrière et en avant, le convertisseur se déclencher à chaque fois que la page est affichée.
Cela provoque de nouveaux descripteurs de fichiers à être créé en continu et bloquera toute tentative de supprimer le fichier car il est encore en usage. Cela peut être vérifié en utilisant l'Explorateur de Processus.
Si le fichier image peut être supprimée à un certain point, un convertisseur tel que cela peut être utilisé:
l'utilisation de XAML pour se lier à un Système.De dessin.Image dans un Système.De Windows.Contrôle de l'Image
L'inconvénient avec ce flux de mémoire de la méthode est que l'image(s) chargés et décodé à chaque fois et pas de mise en cache peut avoir lieu:
"Pour éviter que les images soient décodés plus d'une fois, affecter l'Image.Propriété de la Source à partir d'un Uri plutôt que d'utiliser de la mémoire des flux"
Source: "des conseils de Performances pour les applications du Windows Store en utilisant XAML"
Pour résoudre le problème de performances, le modèle de référentiel peut être utilisé pour fournir une couche de mise en cache. La mise en cache peut prendre de la place en mémoire, ce qui peut provoquer des problèmes de mémoire, ou sous forme de vignettes des fichiers qui se trouvent dans un dossier temp qui peut être effacé lorsque l'application se ferme.
vous pouvez utiliser
pour obtenir ce que vous voulez