Xamarin选取器在api调用后未更新
我有一个xamarin选择器,在从api(从内部视图模型)获取国家后,它应该显示国家列表,但是当我将itemsource设置为列表变量时,选择器不会更新Xamarin选取器在api调用后未更新,xamarin,xamarin.forms,picker,Xamarin,Xamarin.forms,Picker,我有一个xamarin选择器,在从api(从内部视图模型)获取国家后,它应该显示国家列表,但是当我将itemsource设置为列表变量时,选择器不会更新 公共离港(离港查看模型mod) { 初始化组件(); model=mod; GetCountryData(); } 私有异步void GetCountryData() { var res=await model.SetCountries();//加载api数据 CountryPikcer.IsEnabled=true; CountryPikce
公共离港(离港查看模型mod)
{
初始化组件();
model=mod;
GetCountryData();
}
私有异步void GetCountryData()
{
var res=await model.SetCountries();//加载api数据
CountryPikcer.IsEnabled=true;
CountryPikcer.ItemDisplayBinding=新绑定(“名称”);//将Name属性设置为显示属性
CountryPikcer.ItemsSource=model.FilterCountries(“”;//获取加载列表
}
视图模型:
私人名单国家;
公共国际国家ID
{
获取{return countryId;}
set{SetProperty(ref countryId,value);}
}
公共部门可视模型()
{
api=新的ApiCaller();
国家=新名单();
}
公共异步任务SetCountries()
{
国家=等待api.GetAll(“国家”);
返回true;
}
公共列表筛选器国家(字符串文本)
{
如果(文本==“”)
返回国;
List filtered=countries.Where(x=>x.Name.Contains(text)).ToList();
返回过滤;
}
在调试器内部,ItemsSource属性正在填充,但选择器不是,我认为您的问题在viewmodel中。您使用的是异步调用,这意味着您的所有控件都是在异步调用的数据可用之前呈现的。在这种情况下,viewmodel应该实现INotifyPropertyChanged。例如:
public List<Country> Countries
{
{
set { countries = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Countries))); }
get { return countries; }
}
}
公开列表国家
{
{
设置{countries=value;PropertyChanged?.Invoke(这是新的propertychangedventargs(nameof(countries));}
获取{返回国家;}
}
}
确保控件数据正确刷新。发布您的viewmodel更重要的是如何处理项源。@Adlorem添加了viewmodel您正在用作项源的
FilterCountries
方法在哪里?@Jason它在viewmodel中只返回List属性,我将添加它。您确定该方法正确吗返回数据?Country
是否包含公共财产“名称”?