Xamarin – Afficher l’image de la chaîne base64

Je connais assez bien Xamarin et XAML et voici ce que j’ai fait jusqu’à présent dans mon projet portable utilisé par Android et iPhone (uniquement avec Android):

Item.cs (chargé à partir de JSON)

[JsonProperty("image")] private ssortingng ImageBase64 { get; set; } [JsonIgnore] private Xamarin.Forms.Image _image = null; [JsonIgnore] public Xamarin.Forms.Image Image { get { if (_image == null) { _image = new Xamarin.Forms.Image() { Source = Xamarin.Forms.ImageSource.FromStream(() => new MemoryStream(Convert.FromBase64Ssortingng(ImageBase64))), BackgroundColor = Color.White, WidthRequest = 64, HeightRequest = 64, }; OnPropertyChanged("Image"); } return _image; } private set { _image = value; } } 

ItemsView.xaml:

   

Les étiquettes sont correctement affichées, mais l’image ne l’est pas. Est-ce que quelqu’un peut m’expliquer ce que je fais mal?

Je n’ai jamais utilisé Xamarin, mais votre code pose des problèmes évidents.

Le type de votre propriété Image doit être ImageSource , et non Image , car vous souhaitez apparemment lier la propriété ImageCource de ImageSource . De plus, appeler OnPropertyChanged dans un getter de propriété ne fonctionne jamais car l’événement PropertyChanged doit être déclenché avant qu’une liaison (ou tout autre consommateur) puisse obtenir une valeur de propriété modifiée.

Au lieu de Image.Source="{Binding ...} , la liaison correcte devrait être

  

Les propriétés doivent être déclarées comme ceci:

 private ssortingng imageBase64; public ssortingng ImageBase64 { get { return imageBase64; } set { imageBase64 = value; OnPropertyChanged("ImageBase64"); Image = Xamarin.Forms.ImageSource.FromStream( () => new MemoryStream(Convert.FromBase64Ssortingng(imageBase64))); } } private Xamarin.Forms.ImageSource image; public Xamarin.Forms.ImageSource Image { get { return image; } set { image = value; OnPropertyChanged("Image"); } } 

Si vous avez vraiment besoin d’une création paresseuse de la valeur de la propriété Image , vous pouvez la rendre en lecture seule et effectuer l’appel OnPropertyChanged correspondant dans le ImageBase64 :

 private ssortingng imageBase64 public ssortingng ImageBase64 { get { return imageBase64; } set { imageBase64 = value; OnPropertyChanged("ImageBase64"); OnPropertyChanged("Image"); } } private Xamarin.Forms.ImageSource image; public Xamarin.Forms.ImageSource Image { get { if (image == null) { image = Xamarin.Forms.ImageSource.FromStream( () => new MemoryStream(Convert.FromBase64Ssortingng(ImageBase64))); } return image; } }