5 Stimmen

Wie kann ich Ereignis auslösen, bevor Element zur Sammlung in C# hinzugefügt wird?

Ich möchte einige Verarbeitung zu tun, bevor ein Element zu einer BindingList hinzugefügt wird. Ich sehe, dass es ein ListChanged-Ereignis gibt, aber dieses wird ausgelöst, nachdem das Element hinzugefügt wurde. Das AddingNew-Ereignis wird nur ausgelöst, wenn die AddNew-Methode (nicht die Add-Methode) aufgerufen wird. Hat jemand so etwas schon einmal gemacht?

UPDATE:

Ich habe die folgenden Klassen erstellt, und wenn die Add-Methode auf der IList aufgerufen wird, wird meine neue Add-Methode ausgelöst. Habe ich also das Casting-Problem, von dem ich an anderer Stelle gelesen habe? Wenn ich die ISpecialCollection-Schnittstelle aus der Sammlung entfernt habe, wird meine Add-Methode nicht aufgerufen. Kann jemand erklären, warum es sich anders verhält? Habe ich das Casting-Problem, wenn ich die Schnittstelle ISpecialCollection< verwende?

public interface ISpecialCollection<T> : IList<T>
{
}

public class SpecialCollection<T> : BindingList<T>, ISpecialCollection<T>
{
  public new void Add (T item)  
  {
    base.Add(item);    
  }
}

class Program
{
  static void Main(string[] args)
  {
    IList<ItemType> list = new SpecialCollection<ItemType>();
    list.Add(new ItemType());
  }
}

0voto

Marcus Griep Punkte 7748

Verwenden Sie die C5 Sammlungen Bibliothek. C5 Sammlungen sind bereits so eingerichtet, dass sie bei verschiedenen Vorgängen Ereignisse auslösen können, z. B. beim Löschen der Sammlung, beim Hinzufügen von Elementen, beim Entfernen von Elementen, beim Einfügen von Elementen und bei allgemeinen Änderungen der Sammlung.

Außerdem implementieren die C5-Bibliothekssammlungen die System.Collection.Generic ICollection y IList Schnittstellen und kann daher auch dann als Implementierung eingesetzt werden, wenn eine Bibliothek z. B. nur eine SCG.ICollection .

EDIT: Ich habe vergessen, einen Teil Ihrer Anforderungen zu erwähnen; viele dieser Ereignisse, die ich oben erwähnt habe, sind abbrechbare Ereignisse und werden ausgelöst, bevor sich die Aktion auf die zugrunde liegende Sammlung ausgewirkt hat, so dass Sie Änderungen vornehmen oder Hinzufügungen, Entnahmen usw. ablehnen können.

-1voto

crazytmack Punkte 1

ObservableCollection verwenden. Es hat Ereignisse, die überwachen, wenn sich die Sammlung ändert. Ich glaube, dass es in erster Linie für WPF verwendet wird, aber ich habe es mit ASP.NET-Projekte auch verwendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X