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;
}