XAMARIN - List View with Binding without Information

2

I'm doing a project with Xamarin.Forms and I'm having a problem. The project is referring to the bus route of my city, however when doing the code and playing to the screen, even though it has BINDING it does not even go to the screen, thus leaving the screen empty.

The problem, in question, would be that I'm doing binding, following tutorial of what I really need (link of what I'm basing myself to do: link ), but as much as I make it look like this, adapting to what I need, my listview goes blank as long as it has information in Items

Any suggestions of what might be for the binding not working in this specific case?

Thank you in advance.

List View:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="APPDiretoPonto.View.CalendarioOnibus"
             Title="Horários">
    <!--IsGroupingEnabled="True"  -->
    <ListView x:Name="MyListView"

            ItemsSource="{Binding Items}"
            ItemTapped="Handle_ItemTapped"
            CachingStrategy="RecycleElement">

    <ListView.GroupHeaderTemplate>
        <DataTemplate>
                <ViewCell>
                    <Label Text="{Binding diasCalendario}" TextColor="Black" FontAttributes="Bold" />
                </ViewCell>
            </DataTemplate>
    </ListView.GroupHeaderTemplate>

        <!--Built in Cells-->
    <ListView.ItemTemplate>
        <DataTemplate>
                <TextCell Text="{Binding nomeRotaOnibus}" TextColor="Green" />
                <!--<Label Text="{Binding nomeRotaOnibus}" TextColor="Black" FontAttributes="Bold" />-->
            </DataTemplate>
    </ListView.ItemTemplate>  
  </ListView>
</ContentPage>

ListView Code

public partial class CalendarioOnibus : ContentPage
{

    public const string DiasUteis = "Dias Úteis";
    public const string Sabados = "Sábados";
    public const string DomingosFeriado = "Domingos / Feriados";

    public ObservableCollection<rotaOnibuslist> Items { get; set; }                
    public rotaOnibuslist listaHorario = new rotaOnibuslist(); //inicio aqui para poder usar nos métodos que preciso        

    public CalendarioOnibus(int idBairro, string sentido)
    {            
        InitializeComponent();    

        Task.Run(async () => await carregaHorariosVariantes(idBairro, sentido));
    }

    async Task carregaHorariosVariantes(int idBairro, string sentido)
    {
        //web serice            
        serviceLinha service = new serviceLinha();

        listaViagem viagemOnibus = await service.buscaVariantes(); //variantes e rotas  
        PartidaPrincipal partidaOnibus = await service.buscaHorario(); //horário e calendario (dias)                        

        viagemOnibus.viagens.RemoveAll(x => !x.id_linha.Equals(idBairro));//só deixo o bairro filtrado
        viagemOnibus.viagens.RemoveAll(x => !x.sentido.Equals(sentido));//só deixo o sentido filtrado
        viagemOnibus.viagens.OrderBy(x => x.id_viagem); //ordeno pela viagem que já deixo ordenado para mostrar no lsit view           

        partidaOnibus.partidas.OrderBy(x => x.id_viagem); //orderno pela viagem 

        List<rotaOnibuslist> listaOnibusHorario = new List<rotaOnibuslist>();
        //rotaOnibuslist listaOnibusHorario = new rotaOnibuslist();
        rotaOnibuslist listaHorarioDiasUteis = new rotaOnibuslist();
        rotaOnibuslist listaHorarioSabados = new rotaOnibuslist();
        rotaOnibuslist listaHorarioDomingos = new rotaOnibuslist();

        foreach (Viagem viagem in viagemOnibus.viagens)
        {
            //pego o código da viagem e o nome da mesma
            int codigoViagem = viagem.id_viagem;
            string nomeViagem = viagem.nome;

            foreach (Partida partida in partidaOnibus.partidas)
            {
                if (partida.id_viagem == codigoViagem) {

                    foreach (Calendario diasOnibus in partida.calendarios) {
                        //string dias = diasOnibus.calendario;
                        foreach (listaPartida partidaHorario in diasOnibus.partidas) {
                            string horario = partidaHorario.partida;
                            rotaOnibus onibus = new rotaOnibus() { horarioOnibus = horario, rota = nomeViagem };                                
                            string dias = diasOnibus.calendario;

                            switch (dias)
                            {
                                case DiasUteis:
                                    listaHorarioDiasUteis.diasCalendario = dias;
                                    listaHorarioDiasUteis.Add(onibus);
                                    break;
                                case Sabados:
                                    listaHorarioSabados.diasCalendario = dias;
                                    listaHorarioSabados.Add(onibus);
                                    break;
                                case DomingosFeriado:
                                    listaHorarioDomingos.diasCalendario = dias;
                                    listaHorarioDomingos.Add(onibus);
                                    break;
                                default:
                                    break;
                            }
                        }
                    }
                }
            }
        }            

        listaOnibusHorario.Add(listaHorarioDiasUteis);
        listaOnibusHorario.Add(listaHorarioSabados);
        listaOnibusHorario.Add(listaHorarioDomingos);

        Items = new ObservableCollection<rotaOnibuslist>(listaOnibusHorario);            
        MyListView.ItemsSource = Items;                        
    }

My classes:

public class Calendario
{
    public string calendario { get; set; }
    public listaPartida[] partidas { get; set; }
}

public class listaPartida
{
    public string idTabela { get; set; }
    public string chegada { get; set; }
    public string partida { get; set; }
}


public class Partida
{
    public Calendario[] calendarios { get; set; }
    public int id_viagem { get; set; }
}

public class PartidaPrincipal
{
    public Partida[] partidas { get; set; }
}

public class Viagem
{
    public object nome_curto { get; set; }
    public string sentido { get; set; }
    public string linha { get; set; }
    public string nome { get; set; }
    public int id_linha { get; set; }
    public int id_viagem { get; set; }
}

public class listaViagem
{
    public List<Viagem> viagens { get; set; }
}

My classes in which I bind:

public class rotaOnibus
{
    public string horarioOnibus { get; set; }
    public string rota { get; set; }
    public string nomeRotaOnibus
    {
        get
        {
            return $"{horarioOnibus} - {rota}";
        }
    }
}

public class rotaOnibuslist : List<rotaOnibus>
{
    public string diasCalendario { get; set; }
    public List<rotaOnibus> rotaOnibus => this;
}
    
asked by anonymous 03.10.2018 / 04:39

1 answer

1

Problem solved.

I'll post below if someone has the same problem:

In my list view I added the property:

IsGroupingEnabled="True"

Looking like this:

<ListView x:Name="MyListView"
ItemsSource="{Binding Items}"
ItemTapped="Handle_ItemTapped"
CachingStrategy="RecycleElement"
IsGroupingEnabled="True">

In the font, I changed from:

listaOnibusHorario.Add(listaHorarioDiasUteis);
listaOnibusHorario.Add(listaHorarioSabados);
listaOnibusHorario.Add(listaHorarioDomingos);
Items = new ObservableCollection<rotaOnibuslist>(listaOnibusHorario);            
MyListView.ItemsSource = Items; 

To:

var list = new List<rotaOnibuslist>()
{
    listaHorarioDiasUteis,
    listaHorarioSabados,
    listaHorarioDomingos
};
MyListView.ItemsSource = list; 

And also, in the method, I added the: base.OnAppearing ();

public CalendarioOnibus(int idBairro, string sentido)
{            
    InitializeComponent();

    base.OnAppearing();

    Task.Run(async () => await carregaHorariosVariantes(idBairro, sentido));
}  

And then the correct list appeared, as it should.

    
04.10.2018 / 02:07