【问题标题】:How to load a Picker in Xamarin forms with data received from the Web Api?如何使用从 Web Api 接收的数据加载 Xamarin 表单中的选取器?
【发布时间】:2020-11-26 18:36:26
【问题描述】:

所以,这是我的模型类“Usuario”

此类具有在我的数据库中从 SQL Server Management Studio 声明的外键“IdTipoUsuario”。所以我用“IList”属性把它放在这里:

namespace APPiGarbage.Models
{
    public class Usuario
    {
        public int IdUsuario { get; set; }
        public string Nome { get; set; }
        public string Foto { get; set; }
        public string Descricao { get; set; }
        public string Email { get; set; }
        public string Senha { get; set; }
        public IList<TipoUsuario> TiposUsuarios { get; set; }
        
    }
}

我有这个其他类 TipoUsuario。此类具有应该在选取器中绑定的“Nome”属性。

namespace APPiGarbage.Models
{
    public class TipoUsuario
    {
        public int IdTipoUsuario { get; set; }
        public string Nome { get; set; }
    }
}

对于我的 MVVM 模型,我尝试了很多代码,但现在我什至不知道该放什么。老实说。

namespace APPiGarbage.ViewModel
{
    public class UsuarioViewModel 
    {
        public List<TipoUsuario> tipos { get; set; }

        public List<Usuario> GetTipos()
        {
            var tipos = new List<Usuario>()
            {

            };
            return tipos;
        }
    }

对于我的 ApiService 类,我有以下代码:

namespace APPiGarbage.API
{
    public class ApiService
    {
        public const string Url = "http://10.0.2.2:44342/";
        public static async Task<List<TipoUsuario>> ObterTipoUsuarios()
        {
            try
            {
                HttpClient client = new HttpClient();
                string url = Url + "/api/TipoUsuario";
                string response = await client.GetStringAsync(url);
                List<TipoUsuario> tipos = JsonConvert.DeserializeObject<List<TipoUsuario>>(response);
                return tipos;
            }
            catch (Exception)
            {

                throw;
            }
        }
    }
}

这是我的 UsuarioPage.xaml 中的 Picker:

<Picker Title="Selecione o Tipo de Usuario"
             ItemsSource="{Binding TipoUsuario}"
             ItemDisplayBinding="{Binding Nome}"/>

最后是 UsuarioPage.xaml.cs:

namespace APPiGarbage.Pages.UsuarioPage
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class UsuarioPage : ContentPage
    {
        public UsuarioPage()
        {
            InitializeComponent();
            BindingContext = new UsuarioViewModel();
        }
    }
}

感谢您抽出宝贵时间帮助我。

【问题讨论】:

标签: c# xamarin mvvm xamarin.forms xamarin.android


【解决方案1】:

首先,在您的 xaml 中,您的 Picker 的 ItemsSource 应该绑定到您的 ViewModel 中的提示。

<Picker Title="Selecione o Tipo de Usuario"
     ItemsSource="{Binding tipos}"
     ItemDisplayBinding="{Binding Nome}"/>

其次,你应该从 ViewModel 中的 Api 获取数据:

public class UsuarioViewModel
{
    public ObservableCollection<TipoUsuario> tipos { get; set; }

    public UsuarioViewModel() {

        Task<List<TipoUsuario>> task = ApiService.ObterTipoUsuarios();

        tipos = new ObservableCollection<TipoUsuario>(task.Result);

    }
}

那么绑定应该可以工作,如果您有任何问题,请随时问我。

【讨论】:

  • 嘿@jackhua-msft,感谢您的回复。我输入了代码,当我启动应用程序时,我收到了这条消息:“无法初始化动态 xaml 重新加载”,应用程序继续运行而不进行渲染。所以我评论了 BindingContext 'public UsuarioPage() { InitializeComponent(); //BindingContext = new UsuarioViewModel(); }´ 和呈现的应用程序,但显然没有选择器数据。请帮帮我
猜你喜欢
  • 1970-01-01
  • 2019-03-30
  • 2018-03-18
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 2020-04-21
  • 2023-03-27
  • 2012-11-16
相关资源
最近更新 更多