Opfølgning på WPF-foredrag del 2 – WPF databinding
Jeg har tidligere skrevet om WPF databinding og teknikken bag her og her, men det forklarer ikke hvorfor det er så vigtigt i WPF (og generelt i øvrigt). Databinding giver mulighed for at lave en forbindelse mellem visningen og opbevaringen af data, som vedligeholdes næsten automatisk.
Databinding foregår mellem to properties, hvoraf mindst den ene skal være en Dependency Property. Bindingen kan være en- eller tovejs. Typisk vil fx en Textbox være tovejs og en Textblock envejs. Kontroller arver typisk fra DependencyObject, som inkluderer .SetBinding() – øvrige objekter kan anvende den statiske metode BindingOperations.SetBinding(). Det er vigtigt at understrege at bindingen støtter sig op af to interfaces for at kunne fungere 100% for ikke-dependencypropeties – INotifyPropertyChanged for enkelte objekter og INotifyCollectionChanged for samlinger (IBindingList/IBindingListView kan også anvendes, men det er vigtigt kun at implementere et af dem).
Det som INotify…Changed gør, er at publicere når properties ændres – denne notifikation sker automatisk for DependencyProperties pga. deres interne funktionalitet. Hvis vi snakker om read-only/valueobjects/DTO’er er det ikke nødvendigt at implementere INotify…Changed, da det ikke er muligt at lave tovejsbindinger på read-only properties.
Grunden til at man overhovedet vil lave databinding, er for at undgå at skulle skrive alt opdateringskoden manuelt (hvilket iøvrigt er meget error-prone og meget kedeligt…) og for at automatisere og centralisere koden. Det reducerer antallet af eventhandlers ganske betragteligt – og dermed kompleksiteten i den skrevne kode.
Et andet anvendelsesområde for databinding er mellem visuelle objekter – så brugerfladen bliver dynamisk opdateret, når forudsætningerne/datakonteksten ændres. Røde baggrundselementer, når et objekt er låst eller fejlbehæftet – Grønne rettemærker, når valideringen lykkes osv. osv. Igen et område som det er trivielt og tidskrævende – og irriterende at skulle vedligeholde.