Depois de terminar o módulo de MVVM. A View que lista as refeições salvas não atualiza de forma automática.
<?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="Nutricao.ListaRefeicoes" Title="Listagem das refeições">
<ContentPage.Content>
<StackLayout Padding="25">
<ListView ItemsSource="{Binding Refeicoes}" ItemTapped="AcaoItem">>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout>
<Label Text="{Binding Descricao}" FontSize="12" />
<StackLayout Orientation="Horizontal">
<Label Text="Calorias:" FontSize="10" />
<Label Text="{Binding Caloria}" FontSize="10" />
</StackLayout>
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage.Content>
</ContentPage>
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Xamarin.Forms;
namespace Nutricao
{
public partial class ListaRefeicoes : ContentPage
{
public ObservableCollection<Refeicao> Refeicoes { get; set; }
private RefeicaoDAO dao;
public ListaRefeicoes(RefeicaoDAO dao)
{
BindingContext = this;
this.dao = dao;
Refeicoes = dao.Lista;
InitializeComponent();
}
public async void AcaoItem(Object sender, ItemTappedEventArgs e) {
var refeicao = e.Item as Refeicao;
var resposta = await DisplayAlert("Confirmação",
$"Tem certeza que deseja remover a refeição {refeicao.Descricao}?",
"SIM", "Não");
if (resposta) {
dao.Remove(refeicao);
await DisplayAlert("Sucesso", "Refeição removida com sucesso", "OK");
}
}
}
}
using System;
using System.Collections.ObjectModel;
using SQLite;
namespace Nutricao
{
public class RefeicaoDAO
{
private SQLiteConnection conexao;
private ObservableCollection<Refeicao> lista;
public ObservableCollection<Refeicao> Lista
{
get {
if (lista == null)
lista = GetAll();
return lista;
}
set {
lista = value;
}
}
public RefeicaoDAO(SQLiteConnection con)
{
this.conexao = con;
this.conexao.CreateTable<Refeicao>();
}
public void Salvar(Refeicao refeicao)
{
conexao.Insert(refeicao);
}
public ObservableCollection<Refeicao> GetAll()
{
return new ObservableCollection<Refeicao>(conexao.Table<Refeicao>());
}
public void Remove(Refeicao refeicao)
{
this.conexao.Delete<Refeicao>(refeicao.ID);
lista.Remove(refeicao);
}
}
}