Xamarin表单MVVM UWP ListView绑定不';行不通

Xamarin表单MVVM UWP ListView绑定不';行不通,mvvm,xamarin.forms,uwp-xaml,Mvvm,Xamarin.forms,Uwp Xaml,我正在尝试使用ListView实现MVVM ContentPage,该ListView需要绑定到ViewModel中填充的XML模型对象的通用列表,但绑定失败。显示的代码调用一个API,该API返回一个有效的XML数据列表。当绑定通过在codebehind中设置ItemSource直接在XAML Xamarin contentpage的代码隐藏中完成时,同样的代码也可以正常工作。如上所述,只有在尝试将ListView传递给分配给contentpage的ViewModel时,才会出现问题。我已经在

我正在尝试使用ListView实现MVVM ContentPage,该ListView需要绑定到ViewModel中填充的XML模型对象的通用列表,但绑定失败。显示的代码调用一个API,该API返回一个有效的XML数据列表。当绑定通过在codebehind中设置ItemSource直接在XAML Xamarin contentpage的代码隐藏中完成时,同样的代码也可以正常工作。如上所述,只有在尝试将ListView传递给分配给contentpage的ViewModel时,才会出现问题。我已经在ViewModel中完成了代码,ListView已成功填充,但绑定不起作用。我在页面上还有其他控件,模型绑定确实适用于这些控件,但唯一不起作用的控件是ListView。代码如下所示:

视图模型:

使用RestDemo.Model;
使用RestDemo.Views;
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Net.Http;
使用系统文本;
使用System.Threading.Tasks;
使用System.Xml.Linq;
使用Xamarin.Forms;
使用Xamarin.Forms.Xaml;
使用系统组件模型;
使用System.Windows.Input;
使用System.Collections.ObjectModel;
命名空间RestDemo.ViewModel
{
公共类视图模型:INotifyPropertyChanged
{
公共事件属性更改事件处理程序属性更改;
公共视图模型()
{
GetRequest();
}
清单(objPizzaList);;
字符串_selectedDescription=“description:”;
进步;
字符串_cusbuttonext=“Hello”;
公共事业进展
{
获取{return\u progress;}
设置{u progress=value;}
}
公共字符串CusButtonText
{
获取{return\u cusbuttonext;}
设置{u cusbuttonext=value;}
}
公共字符串选择描述
{
获取{return\u selectedDescription;}
设置{u selectedDescription=value;}
}
公共列表ObjPizzaList
{
获取{return_objPizzaList;}
设置
{
if(_objPizzaList!=值)
{
_objPizzaList=值;
OnPropertyChanged(“ObjPizzaList”);
}
}
}
公共字符串描述
{
获取{return\u selectedDescription;}
设置{u selectedDescription=value;}
}
公共ICommand SelectedCommand=>new命令(()=>
{
cusbuttonext=“Goodby”;
});
事件属性ChangedEventHandler INotifyPropertyChanged.PropertyChanged
{
添加
{
}
去除
{
}
} 
公共异步void GetRequest()
{
if(NetworkCheck.IsInternet())
{
Uri geturi=新Uri(“http://api.androidhive.info/pizza/?format=xml“”;//替换您的xml url
HttpClient=新的HttpClient();
HttpResponseMessageResponseGet=await client.GetAsync(geturi);
string response=await responseGet.Content.ReadAsStringAsync();
//Xml解析
ObjPizzaList=新列表();
XDocument doc=XDocument.Parse(响应);
foreach(单据子体中的可变项目(“项目”))
{
XmlPizzaDetails ObjPizzaItem=新的XmlPizzaDetails();
ObjPizzaItem.ID=item.Element(“ID”).Value.ToString();
ObjPizzaItem.Name=item.Element(“Name”).Value.ToString();
ObjPizzaItem.Cost=item.Element(“成本”).Value.ToString();
ObjPizzaItem.Description=item.Element(“Description”).Value.ToString();
ObjPizzaList.Add(objpizzalitem);
}
进步=错误;
}
}
受保护的虚拟void OnPropertyChanged(字符串propertyName)
{
if(PropertyChanged!=null)
{
财产变更(本,
新PropertyChangedEventArgs(propertyName));
}
}
}

}
我让它工作了。是的,可以观察到的集合是一种方式,但通用列表也可以。问题是,当绑定模型时,WebService调用尚未完成,因此当绑定List属性时,它仍然为null。即使此时更新,ObservaleCollection也不会工作,因为它尚未播种。解决方案是在页面的OnAppearing事件上植入ObservableCollection或List,并在此事件中将ViewModel绑定为BindingContext。我的解决方案如下:

protected override async void OnAppearing()
{
var vm=new ViewModel.ViewModel();
if(vm==null)
返回;
HttpClient=新的HttpClient();
HttpResponseMessageResponseGet=等待客户端.GetAsync(vm.Geturi);
string response=await responseGet.Content.ReadAsStringAsync();
//Xml解析
var_objPizzaList=新的可观测集合();
XDocument doc=XDocument.Parse(响应);
vm.GetRequest(doc);
this.BindingContext=vm;

}
您是否尝试将列表更改为ObservableCollection?这是按照MVVM模式将数据发送到ListView的方式。我试图用您的代码重现您的问题,但它错过了
XmlPizzaDetails
类,您可以共享它吗?