Ich habe eine ListView, die Bilder enthält, die Bilder werden von einem Server abgerufen. Der erste API-Aufruf, den ich mache, erhält die Daten in var people
. Ich lade die Listenansicht mit einem Platzhalterbild und führe dann den zweiten API-Aufruf aus, um die Bilder für jedes Element in der Listenansicht zu erhalten. Ich erhalte ein Byte [] als Bild und wandle es in eine ImageSource um. Ich habe eine Suchschaltfläche am oberen Rand der Seite, die ich verbindlich an TempImage
festlegte, die das Byte [] als seine Quelle verwendet, und es ändert sich zu den Bildern, die geladen werden. Die Konvertierung von Byte [] in ImageSource ist also in Ordnung. Die Anfangseinstellung von p.PictureImageSource = "name_circle.png"
funktioniert auch korrekt. Die Einstellung von p.PictureImageSource
auf das konvertierte Byte [] funktioniert jedoch NICHT. Es ändert sich nie von der ursprünglichen "name_circle.png"
. Irgendwelche Ideen?Xamarin ImageSource in ListView nicht aktualisiert
var people = peopleModel.Response;
if(people.Count == 0)
{
ShowNoResults = true;
}
else
{
ShowNoResults = false;
Results = peopleModel.Response;
foreach (PersonViewModel p in Results)
{
p.Initials = p.FirstName[0].ToString() + p.LastName[0];
p.PictureImageSource = "name_circle.png";
}
}
//must do 2 seperate loops so the initials load before going on with 2nd search
foreach (PersonViewModel p in Results)
{
IsBusy = false;
var peopleImage = await peopleService.GetPersonImage("p.Email");
if ((peopleImage.Error == null) && (peopleImage.Response != null))
{
p.Picture = peopleImage.Response;
byte[] imageAsBytes = (byte[])peopleImage.Response;
p.PictureImageSource = ImageSource.FromStream(() => new MemoryStream(imageAsBytes));
TempImage = ImageSource.FromStream(() => new MemoryStream(imageAsBytes));
}
}
OnPropertyChanged();
-
public class PersonViewModel : INotifyPropertyChanged
{
public WorkstationViewModel WorkstationDetail { get; set; }
public List<PointViewModel> Points { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get; set; }
public string Initials { get; set; }
public string Email { get; set; }
public string ID { get; set; }
public string Department { get; set; }
public string BuildingName { get; set; }
public string SiteID { get; set; }
public string BuildingID { get; set; }
public string FloorNumber { get; set; }
public string FloorID { get; set; }
public string Workstation { get; set; }
public string Title { get; set; }
public string Phone { get; set; }
public byte[] Picture { get; set; }
public ImageSource PictureImageSource { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
}
Wie sieht Ihr 'PersonViewModel' aus? – apineda
Es handelt sich um eine öffentliche Klasse mit den Attributen 'öffentliche Zeichenfolge E-Mail', 'öffentliches Byte [] Bild' und 'öffentliche ImageSource PictureImageSource'. –
Implementiert 'PersonViewModel'' INotifyPropertyChanged'? –