Delen via


Overzicht van WPF-gegevensbinding met LINQ naar XML

In dit artikel worden de functies voor dynamische gegevensbinding in de System.Xml.Linq naamruimte geïntroduceerd. Deze functies kunnen worden gebruikt als gegevensbron voor gebruikersinterface-elementen (UI) in WPF-apps (Windows Presentation Foundation). Dit scenario is afhankelijk van speciale dynamische eigenschappen van System.Xml.Linq.XAttribute en System.Xml.Linq.XElement.

XAML en LINQ naar XML

De Extensible Application Markup Language (XAML) is een XML-dialect dat door Microsoft wordt gemaakt ter ondersteuning van .NET-technologieën. Het wordt gebruikt in WPF om elementen van de gebruikersinterface en gerelateerde functies weer te geven, zoals gebeurtenissen en gegevensbinding. In Windows Workflow Foundation wordt XAML gebruikt om programmastructuur weer te geven, zoals programmabeheer (werkstromen). Met XAML kunnen de declaratieve aspecten van een technologie worden gescheiden van de gerelateerde procedurele code die het meer geïnitialiseerde gedrag van een programma definieert.

Er zijn twee algemene manieren waarop XAML en LINQ naar XML kunnen communiceren:

  • Omdat XAML-bestanden goed opgemaakte XML zijn, kunnen ze worden opgevraagd en gemanipuleerd via XML-technologieën zoals LINQ naar XML.

  • Omdat LINQ naar XML-query's een gegevensbron vertegenwoordigen, kunnen deze query's worden gebruikt als gegevensbron voor gegevensbinding voor WPF UI-elementen.

In deze documentatie wordt het tweede scenario beschreven.

Gegevensbinding in Windows Presentation Foundation

Met WPF-gegevensbinding kan een UI-element een van de eigenschappen koppelen aan een gegevensbron. Een eenvoudig voorbeeld hiervan is een Label waarvan de tekst de waarde van een openbare eigenschap in een door de gebruiker gedefinieerd object weergeeft. WPF-gegevensbinding is afhankelijk van de volgende onderdelen:

Bestanddeel Beschrijving
Bindingsdoel Het UI-element dat moet worden gekoppeld aan de gegevensbron. Visuele elementen in WPF zijn afgeleid van de klasse UIElement.
Doelvastgoed De eigenschap afhankelijkheid van het bindingsdoel dat de waarde van de gegevensbindingsbron weerspiegelt. Afhankelijkheidseigenschappen worden rechtstreeks ondersteund door de DependencyObject-klasse, waaruit UIElement is afgeleid.
Bindingsbron Het bronobject voor een of meer waarden die voor de presentatie aan het ui-element worden geleverd. WPF ondersteunt automatisch de volgende typen als bindingsbronnen: CLR-objecten, ADO.NET gegevensobjecten, XML-gegevens (van XPath of LINQ naar XML-query's) of een andere DependencyObject.
Bronpad De eigenschap van de gegevensbron die zich vertaalt naar de waarde of de reeks waarden die moet worden gebonden.

Een afhankelijkheidseigenschap is een concept dat specifiek is voor WPF die een dynamisch berekende eigenschap van een UI-element vertegenwoordigt. Afhankelijkheidseigenschappen hebben bijvoorbeeld vaak standaardwaarden of waarden die worden bepaald door een bovenliggend element. Deze speciale eigenschappen worden ondersteund door exemplaren van de klasse DependencyProperty (en niet velden zoals bij standaardeigenschappen). Zie Overzicht van eigenschappen van afhankelijkhedenvoor meer informatie.

Dynamische gegevensbinding in WPF

Standaard vindt gegevensbinding alleen plaats wanneer het doelgebruikersinterface-element wordt geïnitialiseerd. Dit wordt eenmalige binding genoemd. Voor de meeste doeleinden is dit onvoldoende; normaal gesproken vereist een oplossing voor gegevensbinding dat de wijzigingen dynamisch tijdens runtime worden doorgegeven met behulp van een van de volgende opties:

  • eenrichtingsbinding zorgt ervoor dat de wijzigingen aan één zijde automatisch worden doorgegeven. Meestal worden wijzigingen in de bron weerspiegeld in het doel, maar het omgekeerde kan soms nuttig zijn.

  • In twee-weg binding worden wijzigingen in de bron automatisch doorgegeven aan het doel en wijzigingen in het doel automatisch doorgegeven aan de bron.

Voor eenrichtings- of tweerichtingsbinding moet de bron een wijzigingsmeldingsmechanisme implementeren, bijvoorbeeld door de INotifyPropertyChanged-interface te implementeren of door een PropertyNameChanged patroon te gebruiken voor elke ondersteunde eigenschap.

Zie Data Binding (WPF)voor meer informatie over gegevensbinding in WPF.

Dynamische eigenschappen in LINQ naar XML-klassen

De meeste LINQ-naar-XML-klassen komen niet in aanmerking als de juiste DYNAMISCHE WPF-gegevensbronnen. Sommige van de nuttigste informatie is alleen beschikbaar via methoden, niet eigenschappen en eigenschappen in deze klassen implementeren geen wijzigingsmeldingen. Ter ondersteuning van WPF-gegevensbinding maakt LINQ naar XML een set dynamische eigenschappen beschikbaar.

Deze dynamische eigenschappen zijn speciale runtime-eigenschappen die de functionaliteit van bestaande methoden en eigenschappen in de klassen XAttribute en XElement dupliceren. Ze zijn alleen toegevoegd aan deze klassen om ze in staat te stellen als dynamische gegevensbronnen voor WPF te fungeren. Om aan deze behoefte te voldoen, implementeren al deze dynamische eigenschappen wijzigingsmeldingen. In de volgende sectie vindt u een gedetailleerde verwijzing voor deze dynamische eigenschappen, LINQ naar XML Dynamische eigenschappen.

Notitie

Veel van de standaard openbare eigenschappen, te vinden in de verschillende klassen in de System.Xml.Linq naamruimte, kunnen worden gebruikt voor eenmalige gegevensbinding. Houd er echter rekening mee dat noch de bron, noch het doel dynamisch worden bijgewerkt onder dit schema.

Dynamische eigenschappen van Access

De dynamische eigenschappen in de XAttribute- en XElement klassen kunnen niet worden geopend als standaardeigenschappen. In clr-compatibele talen zoals C# kunnen ze bijvoorbeeld niet het volgende zijn:

  • Rechtstreeks op het moment van compileren geopend. Dynamische eigenschappen zijn onzichtbaar voor de compiler en Visual Studio IntelliSense.

  • Gedetecteerd of geopend tijdens runtime met behulp van .NET-reflectie. Zelfs tijdens runtime zijn ze geen eigenschappen in de basis-CLR-zin.

In C# kunnen dynamische eigenschappen alleen tijdens runtime worden geopend via faciliteiten van de System.ComponentModel naamruimte.

Dynamische eigenschappen van een XML-bron kunnen daarentegen worden geopend via een eenvoudige notatie in de volgende vorm:

<object>.<dynamic-property>

De dynamische eigenschappen voor deze twee klassen worden óf omgezet in een waarde die rechtstreeks kan worden gebruikt, óf in een indexer waaraan een index moet worden geleverd om de resulterende waarde of verzameling waarden te verkrijgen. De laatste syntaxis heeft de volgende notatie:

<object>.<dynamic-property>[<index-value>]

Zie LINQ naar XML Dynamic Propertiesvoor meer informatie.

Voor het implementeren van WPF dynamische binding worden dynamische eigenschappen gebruikt met faciliteiten die worden geleverd door de System.Windows.Data naamruimte, met name de Binding klasse.

Zie ook