asp.net - 如何从 Web API 获取数据到 Xamarin 表单选择器?
问题描述
我正在开发一个 Xamarin 应用程序,我想加载一个带有来自具有服务器数据库的 Web API 的数据的选择器。我试着用谷歌搜索,但大多数文章都没有显示使用 Get async Method、Model 类和 ViewModel 的源“服务类”的内容。如果有人可以帮助我举个例子,我将不胜感激。
这是我在 ASP.NET Web API 中的控制器
// GET: api/TipoUsers
public IQueryable<TipoUser> GetTipoUsers()
{
return db.TipoUsers;
}
模型类
public class TipoUsuario
{
public int IdTipoUsuario { get; set; }
public string Nome { get; set; }
}
视图模型类
public class UsuarioViewModel
{
public ObservableCollection<TipoUsuario> tipos { get; set; }
public UsuarioViewModel() {
Task<List<TipoUsuario>> task = ApiService.ObterTipoUsuarios();
tipos = new ObservableCollection<TipoUsuario>(task.Result);
}
}
Xaml 页面
<Picker Title="Selecione o Tipo de Usuario"
ItemsSource="{Binding tipos}"
ItemDisplayBinding="{Binding Nome}"/>
Xaml.cs
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class UsuarioPage : ContentPage
{
public UsuarioPage()
{
InitializeComponent();
BindingContext = new UsuarioViewModel();
}
}
}
服务等级
public class ApiService
{
public const string Url = "http://thisismysite:44342/";
public static async Task<List<TipoUsuario>> GetTipoUsers()
{
try
{
HttpClient client = new HttpClient();
string url = Url + "/api/TipoUsers";
string response = await client.GetStringAsync(url);
List<TipoUsuario> tipos = JsonConvert.DeserializeObject<List<TipoUsuario>>(response);
return tipos;
}
catch (Exception)
{
throw;
}
}
}
当我调试应用程序时,它只是不加载屏幕。
解决方案
这可能有几个原因,我会检查你的异步方法没有抛出你看不到的异常。异步方法返回一个 Task 对象,如果在其中引发异常,它将在 Task.Exception 中返回的对象中可见。
当您将 ObserableCollection 设置为新实例时,也不会调用属性更改事件,您希望从集合中添加和删除。
你想改变:
public UsuarioViewModel() {
Task<List<TipoUsuario>> task = ApiService.ObterTipoUsuarios();
tipos = new ObservableCollection<TipoUsuario>(task.Result);
}
类似于:
public UsuarioViewModel() {
Task<List<TipoUsuario>> task = ApiService.ObterTipoUsuarios();
var temptipos = task.Result;
foreach(var tipo in temptipos)
{
tipos.Add(tipo);
}
}
推荐阅读
- visual-studio - cvLoadImage 未定义,但其他函数工作正常
- amazon-mws - 亚马逊开发者 ID
- optimization - 如何最大化大于 32 位的 var int?
- react-native - 如何在本机反应中获取可滑动手势值
- python - 用于识别不同日期格式的正则表达式
- matlab - 在循环中将大值分配给 4D 矩阵时如何提高性能?
- augmented-reality - 有没有办法从 Vuforia 检测身体部位?
- python - 无法使用烧瓶将数据库加载到 Web 框架
- angular - 如何在 Angular 应用程序中使用两个 Firebase 数据库
- android - 添加“react-native-camera”依赖项会破坏项目