WPF France

  • Augmenter la taille
  • Taille par défaut
  • Diminuer la taille

Une BindingList gérant l’événement « Removing ».

Envoyer Imprimer PDF
Note des utilisateurs: / 0
MauvaisTrès bien 

(Article original sur le blog de Sébastien)

Je ne sais si comme moi vous avez déjà été confronté au problème, mais j’ai remarqué que dans une BindingList traditionnelle il n’y a pas d’événement « Removing », c’est à dire un événement qui soit déclenché juste avant la suppression d’un élément dans une BindingList. Et bien quand vous utilisez une BindingList, notamment avec la méthodologie MVVM, cela peut s’avérer très pratique.

J’ai me suis donc crée une classe « JBindingList » qui gère l’événement « Removing ». Cette classe est relativement simple, elle hérite de « BindingList » avec en plus la gestion d’un nouvel événement. Mais je ne me suis pas arrêté là, j’ai également donné la possibilité d’annuler la suppression d’un élément, j’ai donc géré une propriété « Cancel ».

Voici le classe JBindinList :

public class JBindingList : BindingList
{
 public JBindingList()
 : base()
 {

 }

 public JBindingList(IList list)
 : base(list)
 {

 }

 public event JListChangedEventHandler Removing;

 protected void OnRemoving(JListChangedEventArgs e)
 {
 if (Removing != null)
 {
 Removing(this, e);
 }
 }

 protected override void RemoveItem(int index)
 {
 if (index > -1 && index < this.Count)
 {
 JListChangedEventArgs e = new JListChangedEventArgs(ListChangedType.ItemDeleted, index);
 OnRemoving(e);
 if (!e.Cancel)
 {
 base.RemoveItem(index);
 }
 }
 }
}

Pour gérer la possibilité d'annuler la suppression je me suis crée une petite classe personnalisé héritant de "ListChangedEventArgs" :

public class JListChangedEventArgs : ListChangedEventArgs
 {
 public JListChangedEventArgs(ListChangedType listChangedType, int newIndex)
 : base(listChangedType, newIndex)
 {

 }
 public Boolean Cancel { get; set; }
 }

On n'oubliera pas la définition du "delegate" utilisé dans "JBindingList" :

public delegate void JListChangedEventHandler(object sender, JListChangedEventArgs e);

Pour l'utilisation c'est très simple, vous créez une JBindingList :

Contacts = new JBindingList(ContactManager.Instance.GetListContact());

Ensuite vous associez le nouvel événement à une de vos méthodes :

Contacts.Removing += Contacts_Removing;

Pour terminer vous n'avez plus qu'a écrire ce qui vous intéresse dans la méthode qui sera appelé à la suppression d'un élément de votre liste :

void Contacts_Removing(object sender, JListChangedEventArgs e)
 {
 Contact c = Contacts[e.NewIndex];
 if (String.IsNullOrEmpty(c.LibContact))
 {
 e.Cancel = true;
 }
 else
 {
 //TODO
 }
 }

(Article original sur le blog de Sébastien)

Sébastien.

 

 

Commentaires (0)
Mise à jour le Dimanche, 18 Avril 2010 09:50  

Partagez


Article au hasard


  • Une demande qui revient souvent lors de l'utilisation d'un TreeView est la possibilité d'identifier facilement et rapidement une collection enfant vide. Cet article vous présentera une solution élégante afin de palier à se problème en ajoutant une indication spécifique dans votre arbre d'éléments.

    Lire l'article

     
    Commentaires (0)...
    Lire la suite...