Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

ListaDB || Dúvida 2

Marquei como solução erroneamente meu outro tópico("https://cursos.alura.com.br/forum/topico-listadb-problema-44723"). Implementei o código citado e ainda assim não quer mostrar a lista.

namespace TesteDrive.ViewModels
{
    public class AgendamentoUsuarioViewModel : BaseViewModel
    {
        ObservableCollection<Agendamento> lista = new ObservableCollection<Agendamento>();
        public ObservableCollection<Agendamento> Lista
        {
            get
            {
                return lista;

            }
            private set
            {
                lista = value;
                OnPropertyChanged();
            }
        }

        public AgendamentoUsuarioViewModel()
        {

                AtualizarLista();

        }

        public void AtualizarLista()
        {
            using (var conexao = DependencyService.Get<ISQLite>().PegarConexao())
            {
                AgendamentoDAO dao = new AgendamentoDAO(conexao);
                var listaDB = dao.Lista;

                var query =
                    listaDB
                    .OrderBy(l => l.DataAgendamento)
                    .ThenBy(l => l.HoraAgendamento);

                this.Lista.Clear();
                foreach (var itemDB in query)
                {
                    this.Lista.Add(itemDB);
                }
            }
        }
    }
}

eu estou na aula 06 -> 6 - modelo MVVM

5 respostas

Olá, Alexander

A lista aparece vazia (sem nenhum item) ou a lista tem linhas porém os nomes não aparecem? Se for o segundo caso, é provável que a propriedade do binding da View esteja com nome diferentes do Model. Dê uma olhada pra checar se os nomes são exatamente os mesmos, inclusive as maiúsculas / minúsculas.

Se não resolver, por favor poste aqui o código da sua View para darmos uma olhada. Obrigado!

Ta bindado como Lista também na 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="TesteDrive.Views.AgendamentoUsuarioView">
    <ListView ItemsSource="{Binding Lista}"
        Margin="10"
        HasUnevenRows="True">
        <ListView.ItemTemplate>
            <DataTemplate >
                <ViewCell>
                    <ViewCell.View>
                        <StackLayout Orientation="Horizontal" Margin="0,5,0,5">
                            <Label Text="{Binding DataFormatada}" FontSize="20" VerticalOptions="Center"></Label>
                            <Label Text=" " HorizontalOptions="StartAndExpand" VerticalOptions="Center"></Label>
                            <Label Text="{Binding Modelo}" FontAttributes="Bold" VerticalOptions="Center"></Label>
                        </StackLayout>
                    </ViewCell.View>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</ContentPage>

AgendamentoUsuarioView

namespace TesteDrive.Views
{
    public partial class AgendamentoUsuarioView : ContentPage
    {
        public AgendamentoUsuarioView()
        {
            InitializeComponent();

            this.BindingContext = new AgendamentoUsuarioViewModel();
        }
    }
}

AgendamentoUsuarioViewModel

namespace TesteDrive.ViewModels
{
    public class AgendamentoUsuarioViewModel : BaseViewModel
    {
        ObservableCollection<Agendamento> lista = new ObservableCollection<Agendamento>();

        public ObservableCollection<Agendamento> Lista
        {
            get
            {
                return lista;

            }
            private set
            {
                lista = value;
                OnPropertyChanged();
            }
        }

        public AgendamentoUsuarioViewModel()
        {
            AtualizarLista();
        }

        public void AtualizarLista()
        {
            using (var conexao = DependencyService.Get<ISQLite>().PegarConexao())
            {
                AgendamentoDAO dao = new AgendamentoDAO(conexao);
                var listaDB = dao.Lista;

                var query =
                    listaDB
                    .OrderBy(l => l.DataAgendamento)
                    .ThenBy(l => l.HoraAgendamento);

                this.Lista.Clear();
                foreach (var itemDB in query)
                {
                    this.Lista.Add(itemDB);
                }
            }
        }
    }
}

AgendamentoDAO

namespace TesteDrive.Data
{
    public class AgendamentoDAO
    {
        readonly SQLiteConnection conexao;

        private List<Agendamento> lista;
        public List<Agendamento> Lista
        {
            get
            {
                return conexao.Table<Agendamento>().ToList();
            }
            private set
            {
                lista = value;
            }
        }

        public AgendamentoDAO(SQLiteConnection conexao)
        {
            this.conexao = conexao;
            this.conexao.CreateTable<Agendamento>();
        }

        public void salvar(Agendamento agendamento)
        {
            //conexao.Insert();
        }
    }
}

eu também tirei um print da tela do celular com as informações do Agendamento.db3, caso esteja algo de errado

propriedades https://i.pinimg.com/564x/08/02/da/0802da2ff5060761e7e11e29a4799a87.jpg

data https://i.pinimg.com/564x/41/40/a6/4140a6df56cc2df45bb4501f2fd1b3cc.jpg

solução!

Alexander, pela imagem que você tirou do celular, não existe nenhuma linha na tabela Agendamento. Veja:

Name: Agendamento
Rows: 0

Então creio que há algo de errado com a gravação dos dados. Você pode postar aqui o código que faz a gravação, aí podemos verificar juntos. Obrigado!

era isso mesmo, faltava a parte "agendamento" dentro do conexao.insert();

public void salvar(Agendamento agendamento)
        {
            conexao.Insert(agendamento);
        }

Excelente, Alexander! Um abraço!