我正在使用Xamarin和MVVM模型构建跨平台应用程序。我对当前的问题做了很多研究,但没有找到一个能够帮助我在论坛中解答的答案/线索。所以,我决定分享它并希望得到帮助。我有一个后端服务器,我可以通过访问令牌进行API调用。在我的后端,我创建了一个帐户表,其中包含firstname,lastname,email等行。我在移动应用程序中创建了一个用户视图模型,我可以在其中显示经过验证的用户信息当我调试时,我可以看到我成功获取用户信息但是,我无法将结果绑定到我的视图中,得到此错误:Models.User无法转换为类型' System.Collections.IEnumerable'。我无法弄清楚它是什么。任何帮助将不胜感激。
这是我的ApiService代码,我在那里对后端服务器进行API调用,并通过访问令牌获取用户信息:
public async Task<User> GetUsersAsync(string accessToken)
{
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
"Bearer", accessToken);
var json = await client.GetStringAsync(Constants.BaseApiAddress + "api/Account/UserInfo");
var user = JsonConvert.DeserializeObject<User>(json);
return user;
}
这是我的UserViewModel,根据访问令牌设置特定用户的api调用
public class UserViewModel : INotifyPropertyChanged
{
private readonly ApiServices _apiServices = new ApiServices();
private User _users;
public User Users
{
get => _users;
set
{
_users = value;
OnPropertyChanged();
}
}
public ICommand GetUserCommand
{
get
{
return new Command(async () =>
{
var accessToken = Settings.AccessToken;
Users = await _apiServices.GetUsersAsync(accessToken);
});
}
}
}
这是我的用户模型
public class User
{
[JsonProperty("FirstName")]
public string FirstName { get; set; }
[JsonProperty("LastName")]
public string LastName { get; set; }
[JsonProperty("Children")]
public string Children { get; set; }
[JsonProperty("Email")]
public string Email { get; set; }
[JsonProperty("Image")]
public string Image { get; set; }
}
这是我的UserProfile视图XAML
<ContentPage.BindingContext>
<viewModels:UserViewModel />
</ContentPage.BindingContext>
<StackLayout Padding="20">
<ListView ItemsSource="{Binding Users}"
HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Padding="0,10">
<Label Style="{StaticResource ProfileNameLabel}" Text="{Binding Email}" />
<Label Margin="0,-5" Style="{StaticResource ProfileTagLabel}" Text="{Binding FirstName}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
后面的UserProfile视图代码
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class UserProfilePage : ContentPage
{
UserViewModel usersViewModel;
public UserProfilePage ()
{
InitializeComponent ();
BindingContext = usersViewModel = new UserViewModel();
}
protected override void OnAppearing()
{
base.OnAppearing();
usersViewModel.GetUserCommand.Execute(null);
}
}
答案 0 :(得分:1)
ListView用于显示多个项目的列表,其ItemSource必须是IEnumerable
(即集合对象)。您的Users对象只是一个项目。您可以Users
List<User>
只包含一个项目
public List<User> Users
或者您可以使用其他UI元素来显示数据