Как загрузить средство выбора в формы Xamarin с данными, полученными из веб-API? - PullRequest
0 голосов
/ 06 августа 2020

Я новичок в формах xamarin и всех этих новых штуках, таких как модель mvvm, asyn c задача, веб-API и т. Д. c. И также извините за мой плохой английский sh, я говорящий по-португальски из Африки.

Итак, это мой модельный класс «Usuario»

Этот класс имеет внешний ключ IdTipoUsuario ", который был объявлен в моей базе данных из SQL Server Management Studio. Я поместил его сюда со свойством «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 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();
        }
    }
}

спасибо, что нашли время, чтобы помочь мне.

1 Ответ

0 голосов
/ 07 августа 2020

Во-первых, в вашем xaml ItemsSource вашего Picker должен быть привязан к типо в вашей ViewModel.

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

Во-вторых, вы должны получить данные из Api в ViewModel:

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

    public UsuarioViewModel() {

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

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

    }
}

Тогда привязка должна работать, и не стесняйтесь задавать мне любые вопросы, если у вас есть.

...