torsdag 16 augusti 2007

ClassMate 1 (ObservableCollection)

ClassMate är en grej jag testar där jag tänkte ha följande upplägg:
Lite då och då så kommer jag skriva om en klass eller ett namespace i .NET som kanske inte alla är bekanta med. Se det som en liten tips och trix. De flesta sitter och kodar med samma gamla klasser som de alltid använt och gör saker på sitt "gamla invanda" sätt. ovetande om att det kanske finns klasser i .NET som kan underlätta. Klassbiblioteket i .NET är hur stort som helst och växer ständigt. Ingen har full koll på alla klasser.
Det jag tänkte göra är att utforska och försöka förklara vissa av de "okända" klasserna och namespacen.


Vi börjar denna gång med en klass som heter ObservableCollection<T>. Den finns bara i .NET 3.0 (om ni inte använder 3.0 så är det kanske dags nu!?). Ni hittar ObservableCollection<T> i System.Collection.ObjectModel. Glöm inte att lägga till en referens till assemblyn WindowsBase.dll, vilket jag tycker är idiotiskt. Förstår att classen inte kan ligga i mscorlib.dll för att inte bryta versionshanteringen men en ny assembly som kunde hetat System.Collections hade inte varit fel. Men men man kan inte få allt.
ObservableCollection<T> är som ni ser generisk. Det är en avancerad variant av System.Collections.Generic.List<T>.
Det som finns i ObservableCollection<T> men inte i List<T> är stöd för eventhantering. När ObservableCollection<T> förändras på något sätt så triggas CollectionChanged eventet som skickar med 2 parametrar; object sender (som vanligt) och
System.Collections.Specialized.NotifyCollectionChangedEventArgs e som innehåller all info du behöver veta om vad som är förändrat, gammalt värde och nytt värde etc. Kanon bra för att ha koll på vad som läggs till, tas bort eller förändras i en lista. Jag har tidigare haft behov av en sån klass och då implementerat den genom att implementera IList<T> och lagt till eventhandlers etc. Det blev en klass på ca 700 rader som skall underhållas och debuggas etc. Skönt att ObservableCollection<T> finns nu. Säg till så skickar jag kodexempel.

1 kommentar:

Anonym sa...

Detta var en riktigt bra Lista att lära sig. Vissta faktiskt inte om den. Tack för en bra artikel.