如何解决从 Firebase Xamarin 查询数据
我正在尝试在我的 xamarin 表单应用中过滤来自 firebase 的数据。
<ListView x:Name="listView" ItemsSource="{Binding ProductList}" HasUnevenRows="true" SeparatorVisibility="None" BackgroundColor="#fafafa">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Margin="0,40">
<Label Text="{Binding Name}" FontSize="Large" TextColor="Black"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
BindingContext = new Productsviewmodel(userId,Navigation,productType);
这是我的视图模型
public class Productsviewmodel : Baseviewmodel
{
public Guid UserId { get; set; }
public string ProductType { get; set; }
private APIService services;
public INavigation Navigation { get; }
private ObservableCollection<ProductModel> _ProductList = new ObservableCollection<ProductModel>();
public ObservableCollection<ProductModel> ProductList
{
get { return _ProductList; }
set
{
_ProductList = value;
OnPropertyChanged();
}
}
public Productsviewmodel(Guid userId,INavigation navigation,string productTyp)
{
UserId = userId;
ProductType = productTyp;
services = new APIService();
Navigation = navigation;
ProductList = services.GetProducts();
}
}
还有我的 APIService 类
internal ObservableCollection<ProductModel> GetProducts()
{
var outfitFeedData = firebase
.Child("Products")
.AsObservable<ProductModel>()
.AsObservableCollection();
return outfitFeedData;
}
一切正常,直到我开始查询结果,然后我开始收到转换类型异常。
EG:
internal ObservableCollection<ProductModel> GetProducts()
{
var outfitFeedData = firebase
.Child("Products")
.AsObservable<ProductModel>()
.AsObservableCollection().Select(item => new ProductModel
{
Type = "K",});
return outfitFeedData;
}
解决方法
无法将类型“System.Collections.Generic.IEnumerable
从您的错误消息中,您可以看到您将通过 LINQ 结果获得 System.Collections.Generic.IEnumerable 类型的数据 OutfitFeedData。
internal ObservableCollection<ProductModel> GetProducts()
{
var outfitFeedData = firebase
.Child("Products")
.AsObservable<ProductModel>()
.AsObservableCollection().Select(item => new ProductModel
{
Type = "K",});
return outfitFeedData;
}
但是你通过GetProducts方法将List数据类型转换为ObservableCollection,我认为是问题所在。
请修改 ObservableCollection ProductList 如下代码:
private List<ProductModel> _ProductList;
public List<ProductModel> ProductList
{
get { return _ProductList; }
set
{
_ProductList = value;
OnPropertyChanged();
}
}
然后更改 GetProducts() 方法的返回值。
internal List<ProductModel> GetAllPersons()
{
var outfitFeedData= (firebase
.Child("Products")
.OnceAsync<ProductModel>()).Select(item => new ProductModel
{
Type = "K",}).ToList();
return outfitFeedData;
}
注意:我建议您可以实现 Async 和 Await 以从 firebase 获取数据,如下所示:
public async Task<List<Person>> GetAllPersons()
{
return (await firebase
.Child("Persons")
.OnceAsync<Person>()).Select(item => new Person
{
Name = item.Object.Name,PersonId = item.Object.PersonId
}).ToList();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。