2
I’m doing a project with Xamarin.Forms and I have a problem. The project is related to the bus route of my city, but when making the code and playing to the screen, as much as it has BINDING the same does not get to go to the screen, thus leaving the screen empty.
The problem, in question, would be that I am doing Binding, following tutorial of what I really need (link of what I am basing myself to do: https://xamarinhelp.com/xamarin-forms-listview-grouping/), but as much as I make it look like this, adapting it to what I need, my listview is blank no matter how much information I have on Items
Any suggestions of what might be for Binding not working in this case in specific?
From now on, thank you.
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 Binding:
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;
}
I would recommend you to reduce the amount of information in your question by highlighting more clearly the point where you find the problem.
– Leandro Angelo
Adjusted the question to clarify the doubt/problem I’m having. Thanks in advance.
– Renan Domingos