イメージを含むListViewがあり、イメージがサーバーからフェッチされます。私が作る最初のAPI呼び出しは、var people
のデータを取得します。私は、プレースホルダ画像でリストビューを読み込み、2番目のAPI呼び出しを実行して、リストビュー内の各項目の画像を取得します。私は画像としてbyte []を受け取り、それをImageSourceに変換します。私は、ページの上部にある検索ボタンを持って、TempImage
へのバインディングを設定し、バイト[]をソースとして使用し、ロードされたイメージに変更します。 byte []のImageSourceへの変換は問題ありません。 p.PictureImageSource = "name_circle.png"
の初期設定も正しく動作します。ただし、変換されたbyte []にp.PictureImageSource
を設定しても機能しません。それは最初の"name_circle.png"
から変わることはありません。何か案は?リストビュー内のXamarin ImageSourceは更新されません。
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;
}
あなたの 'PersonViewModel'はどのように見えますか? – apineda
これは 'public string Email'、' public byte [] Picture'、 'public ImageSource PictureImageSource'の属性を持つパブリッククラスです。 –
'PersonViewModel'は' INotifyPropertyChanged'を実装していますか? –