Gegevensbinding in een Windows Presentation Foundation-client
Het WPFDataBinding-voorbeeld demonstreert het gebruik van gegevensbinding in een WPF-client (Windows Presentation Foundation). In het voorbeeld wordt een WCF-service (Windows Communication Foundation) gebruikt die willekeurig een matrix met albums genereert om terug te keren naar de client. Elk album heeft een naam, een prijs en een lijst met albumnummers. De albumnummers hebben een naam en duur. De informatie die door de service wordt geretourneerd, wordt automatisch gebonden aan de gebruikersinterface (UI) die wordt geleverd door de WPF-client (Windows Presentation Foundation).
Notitie
De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.
Met gegevensbinding kan een gegevensbron automatisch worden gebonden aan een gebruikersinterface. Dit vereenvoudigt het programmeermodel omdat u niet programmatisch elk UI-element hoeft bij te werken met de gegevens uit een gegevensobject of een matrix met gegevensobjecten. U kunt een object binden aan één UI-element of een matrix aan een besturingselement dat meerdere invoer gebruikt, zoals een ListBox
. De volgende code laat zien hoe u gegevens koppelt aan het element van de DataContext
gebruikersinterface.
// Event handler executed when call is complete
void client_GetAlbumListCompleted(object sender, GetAlbumListCompletedEventArgs e)
{
// This is on the UI thread, myPanel can be accessed directly
myPanel.DataContext = e.Result;
}
In het vorige voorbeeld wordt het DataContext
voor het grid
indelingselement met de naam myPanel
ingesteld op de gegevens die door de GetAlbumList
methode worden geretourneerd. Hiermee DataContext
kunnen elementen informatie overnemen van de bovenliggende elementen over de gegevensbron die wordt gebruikt voor binding, evenals andere kenmerken van de binding, zoals het pad. De coderegel moet telkens worden uitgevoerd wanneer de gegevens op de server worden bijgewerkt. Het wordt bijvoorbeeld uitgevoerd wanneer het venster wordt geïnitialiseerd en wanneer er een nieuw album wordt toegevoegd.
In de volgende XAML-voorbeeldcode geeft u de ListBox
opgegeven ItemsSource="{Binding }"
.
<ListBox
ItemTemplate="{StaticResource AlbumStyle}"
ItemsSource="{Binding }"
IsSynchronizedWithCurrentItem="true" />
Hiermee geeft u op dat de gegevens die zijn gebonden aan het ui-element op het hoogste niveau, ook zijn gebonden aan dit besturingselement (dat wil gezegd de matrix van albums). Daarnaast ItemTemplate="{StaticResource AlbumStyle}"
geeft u de gegevenssjabloon op die voor elk item in het ListBox
item moet worden gebruikt. U kunt ook gegevenssjablonen definiëren om op te geven hoe de gegevens moeten worden opgemaakt. Deze gegevenssjablonen kunnen opnieuw worden gebruikt voor andere UI-elementen in de toepassing. Het voordeel is dat de gegevenssjabloon op één plaats wordt gedefinieerd en onderhouden.
In de AlbumStyle
gegevenssjabloon wordt een raster met twee naast elkaar TextBlock
weergegeven. De ene geeft de naam van het album en het andere nummer van tracks in het album op.
<DataTemplate x:Key="AlbumStyle">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="260" />
<ColumnDefinition Width="60" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" TextContent="{Binding Path=Title}" />
<TextBlock Grid.Column="1" TextContent="{Binding Path=Tracks#.Count}" HorizontalAlignment="Right" />
</Grid>
</DataTemplate>
Met de volgende XAML-code wordt een tweede ListBox
gemaakt.
<ListBox Grid.Row="2"
Grid.ColumnSpan="2"
ItemTemplate="{StaticResource TrackStyle}"
ItemsSource="{Binding Path=Tracks}" />
De code geeft een pad voor de ItemsSource
. Dit geeft aan dat de gegevens die aan dit besturingselement zijn gebonden, niet de gegevens op het hoogste niveau zijn, maar een eigenschap van de gegevens op het hoogste niveau met de naam Tracks
. Deze eigenschap vertegenwoordigt de matrix van nummers in het album. Daarnaast wordt een andere DataTemplate
naam TrackStyle
opgegeven. De indeling van de TrackStyle
sjabloon is vergelijkbaar met die van de AlbumStyle
sjabloon, maar de TextBlock
s zijn gebonden aan verschillende eigenschappen. Dit komt doordat de twee sjablonen worden gebruikt met verschillende gegevensobjecten.
Het voorbeeld instellen, compileren en uitvoeren
Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.
Als u de C# of Visual Basic .NET-editie van de oplossing wilt bouwen, volgt u de instructies in het bouwen van de Windows Communication Foundation-voorbeelden.
Als u het voorbeeld wilt uitvoeren in een configuratie met één of meerdere computers, volgt u de instructies in Het uitvoeren van de Windows Communication Foundation-voorbeelden.