Overblog Suivre ce blog
Editer l'article Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

2 février 2014 7 02 /02 /février /2014 01:30

1-Event

- On a d’un côté la classe « éditeur » qui déclenche l’event et de l’autre une ou plusieurs classes « abonnées » qui seront notifiées des changements .

- Utilisation de INotifyPropertyChanged et du binding pour afficher à l’utilisateur le changement de valeur.

Exemple on simule juste un changement de valeur décimale  

public class Publisher

    {

        public delegate void PriceChangedEventHandler(decimal newPrice); // delegate

        public event PriceChangedEventHandler PriceChanged; // event

 

        public void ChangePrice(decimal newPrice)

        {

            if (PriceChanged != null)

                PriceChanged(newPrice);

        }

 

    }

    public class Subscriber : INotifyPropertyChanged

    {

        private decimal _price;

 

        public decimal Price

        {

            get { return _price; }

            set

            {

                _price = value;

                this.OnPropertyChanged("Price");

            }

        }

 

        public Subscriber(Publisher publisher)

        {

            //publisher.Event += méthode

            publisher.PriceChanged += OnPriceChanged;

        }

 

        public void OnPriceChanged(decimal newPrice)

        {

            Price = newPrice;

        }

 

        //

        public event PropertyChangedEventHandler PropertyChanged;

 

        public void OnPropertyChanged(string propertyName)

        {

            if (this.PropertyChanged != null)

            {

                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

            }

        }

 

    }

 Utilisation  

        Publisher publisher;

        Subscriber client;

        Subscriber client2;

 

        private void Form1_Load(object sender, EventArgs e)

        {

            publisher = new Publisher();

            client = new Subscriber(publisher);

            client2 = new Subscriber(publisher);

 

            lblNotifyClientPrice.DataBindings.Add("Text", client, "Price",false,DataSourceUpdateMode.OnPropertyChanged);

        }

 

        private void btnValidate_Click(object sender, EventArgs e)

        {

            decimal result ;

            if (decimal.TryParse(txtChangingPrice.Text,out result))

            {

                publisher.ChangePrice(result);

            }

        }

 

2- Avec EventHandler<TEventArgs>

    // Ajout d'une classe EventArgs

    public class PriceChangedEventArgs : EventArgs

    {

        public decimal Price { get; set; }

    }

 

    public class Publisher

    {

        // remplacement du delegate et event

        public event EventHandler<PriceChangedEventArgs> PriceChanged;

 

        public void ChangePrice(decimal newPrice)

        {

            if (PriceChanged != null)

                PriceChanged(this, new PriceChangedEventArgs() { Price = newPrice });

        }

 

    }

    public class Subscriber : INotifyPropertyChanged

    {

        private decimal _price;

 

        public decimal Price

        {

            get { return _price; }

            set

            {

                _price = value;

                this.OnPropertyChanged("Price");

            }

        }

 

        public Subscriber(Publisher publisher)

        {

            publisher.PriceChanged += OnPriceChanged;

        }

 

        // changement de la signature

        public void OnPriceChanged(object sender,PriceChangedEventArgs e)

        {

            Price = e.Price;

        }

 

        //

        public event PropertyChangedEventHandler PropertyChanged;

 

        public void OnPropertyChanged(string propertyName)

        {

            if (this.PropertyChanged != null)

            {

                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

            }

        }

 

    }

 

3-BindingList<T>  

Fournit une liste facilitant le binding .Ce type de liste est adapté aux Winforms, avec WPF on préfèrera ObservableCollection    

       public BindingList<Client> clients;

 

        private void Form1_Load(object sender, EventArgs e)

        {

            clients = new BindingList<Client>{

                new Client{ Name="Bellin Marie",Email="bellinmarie@live.com"},

                new Client{ Name="Dupond Paul",Email="dupondp30@live.com"},

                new Client{ Name="Bidule luc",Email="bluc10@msn.com"}

            };

 

 

            // binding listbox

            BindingSource source = new BindingSource();

            source.DataSource = clients;

            listBox1.DataSource = source;

            listBox1.DisplayMember = "Name";

           

            dataGridView1.DataSource = clients;    

           

        }

        private void button1_Click(object sender, EventArgs e)

        {

            // Modification d’un élément et ajout, la listBox et le datagridView se mettent à jour

            clients[0].Name = "Bellin Laura";

            clients.Add(new Client { Name = "Orea Lucie", Email = "orea135@live.com" });

          

            dataGridView1.Refresh();

        }

 

Partager cet article

Repost 0
Published by Romagny13 - dans C
commenter cet article

commentaires