ListView中的Xamarin ImageSource未更新

ListView中的Xamarin ImageSource未更新,xamarin,Xamarin,我有一个包含图像的列表视图,这些图像是从服务器获取的。我进行的第一个API调用获取var people中的数据。我用占位符图像加载listview,然后运行第二个API调用来获取listview中每个项目的图像。我接收一个字节[]作为图像,并将其转换为ImageSource。我在页面顶部有一个搜索按钮,我将其设置为绑定到TempImage,它使用字节[]作为其源,并更改为加载的图像。因此字节[]到ImageSource的转换很好。p.PictureImageSource=“name\u circ

我有一个包含图像的列表视图,这些图像是从服务器获取的。我进行的第一个API调用获取
var people
中的数据。我用占位符图像加载listview,然后运行第二个API调用来获取listview中每个项目的图像。我接收一个字节[]作为图像,并将其转换为ImageSource。我在页面顶部有一个搜索按钮,我将其设置为绑定到
TempImage
,它使用字节[]作为其源,并更改为加载的图像。因此字节[]到ImageSource的转换很好。
p.PictureImageSource=“name\u circle.png”
的初始设置也能正常工作。但是,将
p.PictureImageSource
设置为转换的字节[]不起作用。它从不改变开头的
“name\u circle.png”
。有什么想法吗

                        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();
-

公共类PersonViewModel:INotifyPropertyChanged
{
公共WorkstationViewModel WorkstationDetail{get;set;}
公共列表点{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共字符串全名{get;set;}
公共字符串首字母{get;set;}
公共字符串电子邮件{get;set;}
公共字符串ID{get;set;}
公共字符串部门{get;set;}
公共字符串BuildingName{get;set;}
公共字符串SiteID{get;set;}
公共字符串BuildingID{get;set;}
公共字符串FloorNumber{get;set;}
公共字符串floorrid{get;set;}
公共字符串工作站{get;set;}
公共字符串标题{get;set;}
公用字符串电话{get;set;}
公共字节[]图片{get;set;}
公共ImageSource PictureImageSource{get;set;}
公共事件属性更改事件处理程序属性更改;
}

Apineda认为listview根本没有使用新数据刷新是正确的。我将两个API调用分离为两个不同的方法(不确定这部分是否完全必要)。第二次调用完成后,我将listview的
ItemSource
设置为null,然后返回到
Results
值,强制刷新。现在图像显示

searchGestureRecognizer.Tapped += async (s, e) => {
                await _viewModel.GetResults();
                await _viewModel.GetImagesForResults();
                resultsListView.ItemsSource = null;
                resultsListView.ItemsSource = _viewModel.Results;
            };

您的
PersonViewModel
是什么样子的?它是一个公共类,具有属性
公共字符串电子邮件
公共字节[]图片
,和
公共图像源PictureImageSource
PersonViewModel
是否实现了
INotifyPropertyChanged
?@WillNasby实际上我想看看代码来解决@mark刚才问的问题。您的
PersonViewModel
需要实现
INotifyPropertyChanged
,以便其某个属性的更新触发通知。抱歉,我添加了完整的代码。我添加了
INotifyPropertyChanged
,但问题仍然存在。其他一切都很好(姓名、首字母等)。
searchGestureRecognizer.Tapped += async (s, e) => {
                await _viewModel.GetResults();
                await _viewModel.GetImagesForResults();
                resultsListView.ItemsSource = null;
                resultsListView.ItemsSource = _viewModel.Results;
            };