Xamarin - Afficher une image de chaîne base64
Je suis assez nouveau à Xamarin et XAML trucs et voici ce que j'ai fait jusqu'à présent dans mon portable de projet utilisé par Android & iPhone (uniquement en utilisant Android):
Élément.cs (chargé de JSON)
[JsonProperty("image")]
private string 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.FromBase64String(ImageBase64))),
BackgroundColor = Color.White,
WidthRequest = 64,
HeightRequest = 64,
};
OnPropertyChanged("Image");
}
return _image;
}
private set
{ _image = value; }
}
ItemsView.xaml:
<StackLayout VerticalOptions="FillAndExpand" Padding="5,20,5,0" >
<Label Text="Items" VerticalOptions="Center" Font="35" HorizontalOptions="Center" />
<ListView x:Name="list" ItemsSource="{Binding Items}">
<ListView.ItemTemplate>
<DataTemplate>
<ImageCell
Text="{Binding ItemName}"
Detail="{Binding Infos, StringFormat='{0}'}"
Image.Source="{Binding Path=Image}">
</ImageCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
J'ai correctement obtenir mon étiquettes affichées, mais l'image n'est pas.
Quelqu'un peut-il m'expliquer ce que je fais mal?
2 choses sautent à moi:) vous êtes de la liaison d'un ImageSource à une Image b) "Path=" est inutile
OriginalL'auteur Arnaud F. | 2016-05-06
Vous devez vous connecter pour publier un commentaire.
Le type de votre
Image
propriété doit êtreImageSource
, pasImage
, puisqu'il semblerait que vous souhaitez lier un ImageCell deImageSource
de la propriété. En outre, l'appel deOnPropertyChanged
dans une propriété de lecture ne fonctionne jamais, parce que lePropertyChanged
événement doit être tiré avant une liaison (ou tout autre bien de consommation), vous pouvez obtenir un changement de la valeur de la propriété.Au lieu de
Image.Source="{Binding ...}
, la liaison correct devrait êtreLes propriétés doivent être déclarées comme ceci:
Si vous vraiment besoin paresseux création de la
Image
la valeur de la propriété, vous pouvez le faire en lecture seule, et de faire le correspondantOnPropertyChanged
appel dans leImageBase64
setter:OriginalL'auteur Clemens