Oi Luis!
Atendendo seu pedido, não foi fácil, mas consegui fazer funcionar em XAML.
Geralmente o desenvolvimento em XAML é mais simples, mas esse caso é uma exceção, porque
as views possuem parâmetros, e o XAML é meio desajeitado para trabalhar com parâmetros. Outro
problema também é que tive que criar construtores alternativos para algumas classes pois a instância
do SQLiteConnection
criada com o DependencyService
via código não pode ser criada pelo XAML (eu
pelo menos desconheço, seria preciso investigar melhor).
Se você quiser fazer funcionar, vou colocar aqui os passos que eu dei para chegar até o projeto funcionando:
Faça uma cópia do seu projeto para outra pasta, pois as mudanças são muito bruscas. Provavelmente você
vai querer voltar ao projeto inicial.
Na classe RefeicaoDAO
, crie um construtor sem parâmetros, e dentro dele atribua ao membro conexao
uma instância gerada via DependencyService
:
public RefeicaoDAO()
{
conexao = DependencyService.Get<ISQLite>().GetConnection();
conexao.CreateTable<Refeicao>();
}
- Ainda na classe
RefeicaoDAO
, referencie a propriedade Lista
nesses dois métodos com a letra maiúscula
(a propriedade pública):
public void Salvar(Refeicao refeicao)
{
conexao.Insert(refeicao);
Lista.Add(refeicao);
}
public void Remove(Refeicao refeicao)
{
conexao.Delete<Refeicao>(refeicao.ID);
Lista.Remove(refeicao);
}
Renomeie seu arquivo Homeview.cs
para Homeview.xaml.cs
No seu arquivo HomeView.xaml.cs
, comente o código dentro do construtor e acrescente
a chamada para o método InitializeComponent
:
namespace Refeicao.View
{
public partial class HomeView : TabbedPage
{
public HomeView()
{
InitializeComponent();
//SQLiteConnection sqLiteConnection = DependencyService.Get<ISQLite>().GetConnection();
//RefeicaoDAO dao = new RefeicaoDAO(sqLiteConnection);
//CadastroView cadastroView = new CadastroView(dao);
//ListaRefeicaoView listaRefeicaoView = new ListaRefeicaoView(dao);
//this.Children.Add(cadastroView);
//this.Children.Add(listaRefeicaoView);
}
}
}
- Crie um novo arquivo
HomeView.xaml
e acrescente este conteúdo:
<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:Refeicao.View"
xmlns:data="clr-namespace:AluraNutricao.Data"
x:Class="Refeicao.View.HomeView"
Title="Home View">
<TabbedPage.Resources>
<ResourceDictionary>
<data:RefeicaoDAO x:Key="refeicaoDao"/>
</ResourceDictionary>
</TabbedPage.Resources>
<TabbedPage.Children>
<views:CadastroView x:Key="cadastroView">
<x:Arguments>
<data:RefeicaoDAO x:Key="refeicaoDao"/>
</x:Arguments>
</views:CadastroView>
<views:ListaRefeicaoView x:Key="listaRefeicaoView">
<x:Arguments>
<data:RefeicaoDAO x:Key="refeicaoDao"/>
</x:Arguments>
</views:ListaRefeicaoView>
</TabbedPage.Children>
</TabbedPage>
Note no código acima o uso do atributo x:Arguments
para passar parâmetros para os construtores
das views de cadastro e de listagem de refeições!
É isso!
Se você quiser experimentar essas mudanças no seu código, lembre-se primeiro de fazer um backup do seu código.
Boa sorte e bons estudos!