Hello, I would like to know how to create a listview in which you have the option to remove that item from the list. I'm working with MVVM
Hello, I would like to know how to create a listview in which you have the option to remove that item from the list. I'm working with MVVM
I do not know if this resolves:
<StackLayout Orientation="Vertical" Padding="10,5,10,0">
<ListView x:Name="listaProdutos" ItemSelected="listaProdutos_ItemSelected" BackgroundColor="Aqua" SeparatorColor="Blue">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.ContextActions>
<MenuItem Clicked="OnAtualizar" CommandParameter="{Binding .}" Text="Atualizar" />
<MenuItem Clicked="OnDeletar" CommandParameter="{Binding .}" Text="Deletar" IsDestructive="True" />
</ViewCell.ContextActions>
<StackLayout Padding="10,10" Orientation="Horizontal">
<Label Text="{Binding Nome}" HorizontalOptions="StartAndExpand"/>
<Label Text="{Binding Categoria}" TextColor="Blue" HorizontalOptions="Center"/>
<Label Text="{Binding Preco}" HorizontalOptions="End"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
This is the complete code
public partial class MainPage : ContentPage
{
DataService dataService;
List<Produto> produtos;
public MainPage()
{
InitializeComponent();
dataService = new DataService();
AtualizaDados();
}
async void AtualizaDados()
{
produtos = await dataService.GetProdutosAsync();
listaProdutos.ItemsSource = produtos.OrderBy(item => item.Nome).ToList();
}
private async void btnAdicionar_Clicked(object sender, EventArgs e)
{
//await Navigation.PushModalAsync(new MainPageModal());
if (Valida())
{
Produto novoProduto = new Produto
{
Nome = txtNome.Text.Trim(),
Categoria = txtCategoria.Text.Trim(),
Preco = Convert.ToDecimal(txtPreco.Text)
};
try
{
await dataService.AddProdutoAsync(novoProduto);
//LimpaProduto();
AtualizaDados();
}
catch (Exception ex)
{
await DisplayAlert("Erro", ex.Message, "OK");
}
}
else
{
await DisplayAlert("Erro", "Dados inválidos...", "OK");
}
}
private async void OnAtualizar(object sender, EventArgs e)
{
if (Valida())
{
try
{
var mi = ((MenuItem)sender);
Produto produtoAtualizar = (Produto)mi.CommandParameter;
produtoAtualizar.Nome = txtNome.Text;
produtoAtualizar.Categoria = txtCategoria.Text;
produtoAtualizar.Preco = Convert.ToDecimal(txtPreco.Text);
await dataService.UpdateProdutoAsync(produtoAtualizar);
//LimpaProduto();
AtualizaDados();
}
catch (Exception ex)
{
await DisplayAlert("Erro", ex.Message, "OK");
}
}
else
{
await DisplayAlert("Erro", "Dados inválidos...", "OK");
}
}
private async void OnDeletar(object sender, EventArgs e)
{
try
{
var mi = ((MenuItem)sender);
Produto produtoDeletar = (Produto)mi.CommandParameter;
await dataService.DeletaProdutoAsync(produtoDeletar);
//LimpaProduto();
AtualizaDados();
}
catch (Exception ex)
{
await DisplayAlert("Erro", ex.Message, "OK");
}
}
private bool Valida()
{
if (string.IsNullOrEmpty(txtNome.Text) && string.IsNullOrEmpty(txtCategoria.Text) && string.IsNullOrEmpty(txtPreco.Text))
{
return false;
}
else
{
return true;
}
}
private void listaProdutos_ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
var produto = e.SelectedItem as Produto;
txtNome.Text = produto.Nome;
txtCategoria.Text = produto.Categoria;
txtPreco.Text = produto.Preco.ToString();
}
}