Je ne comprend pas pourquoi ma liste ne se met pas à jour quand j'appui sur le "+" alors que la liste s'incrémente bien de 1 coté server, avec le code suivant:
using System;
using Xamarin.Forms;
using EGOGB.Model;
using System.Linq;
using System.Collections.ObjectModel;
namespace EGOGB
{
public partial class MainPage : ContentPage
{
ObservableCollection<Product> products = new ObservableCollection<Product>
{
new Product { Id = 0, Name = "SANDWICH", Price = 1.50, Number = 0 },
new Product { Id = 1, Name = "FRITE", Price = 3.00, Number = 0 },
new Product { Id = 2, Name = "SODA", Price = 2.00, Number = 0 },
new Product { Id = 3, Name = "BARBE A PAPA", Price = 1.00, Number = 0 }
};
public MainPage()
{
InitializeComponent();
MyListView.ItemsSource = products;
}
void OnMoreButtonClicked(object sender, EventArgs e)
{
var button = sender as Button;
var product = button.BindingContext as Product;
products.First(p => p.Id == product.Id).Number++;
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace EGOGB.Model
{
public class Product
{
public int Id { set; get; }
public string Name { set; get; }
public int Number { set; get; }
public double Price { set; get; }
public void MoreOne()
{
Number++;
}
public void LessOne()
{
if (Number > 0)
{
Number--;
}
}
}
}
En fait Number++ affecte la valeur de Number à Number PUIS l'incrémente.
++Number est censé incrémenter Number PUIS affecter la valeur de Number à Number
Mais dans tous les cas, tu n'aurais même pas à utiliser cette incrémentation directement si tu appelais tes méthode MoreOne et LessOne (que tu as crée dans cet objectif je pense), où l'ordre du ++ n'a pas d'importance vu que tu agis sur la propriété directement, et que tu ne fais pas une affectation comme dans ta méthode OnMoreButtonClicked()
Merci @earp91 pour tes recommandations j'en prend bonne note.
Néanmoins j'ai trouvé la raison pour laquelle ma ListView ne se mettait pas à jour.
Il fallait mettre le code suivant:
using System.ComponentModel;
namespace EGO_GALA_Buvette.Model
{
public class Product : INotifyPropertyChanged
{
private int _id;
private string _name;
private int _number;
private double _price;
public int Id {
get { return _id; }
set
{
_id = value;
OnPropertyChanged("Id");
}
}
public string Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged("Name");
}
}
public int Number
{
get { return _number; }
set
{
_number = value;
OnPropertyChanged("Number");
}
}
public double Price
{
get { return _price; }
set
{
_price = value;
OnPropertyChanged("Price");
}
}
public double Total()
{
return _number * _price;
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
handler?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
A bientôt.
Si vous ne réussissez pas du premier coup, appelez ça « version 1.0 ».
Mettre à jour ListView avec Xamarin
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.