Procédure : Rendre des données disponibles pour la liaison en XAMLHow to: Make Data Available for Binding in XAML

Cette rubrique décrit les différentes façons dont vous pouvez rendre les données disponibles pour langage XAML (eXtensible Application Markup Language)Extensible Application Markup Language (XAML)la liaison dans, en fonction des besoins de votre application.This topic discusses various ways you can make data available for binding in langage XAML (eXtensible Application Markup Language)Extensible Application Markup Language (XAML), depending on the needs of your application.

ExempleExample

Si vous avez un objet Common Language Runtime (CLR) à partir duquel XAMLXAMLvous souhaitez établir une liaison, vous pouvez rendre l’objet disponible pour la liaison pour le définir en tant que ressource et lui donner un. x:KeyIf you have a common language runtime (CLR) object you would like to bind to from XAMLXAML, one way you can make the object available for binding is to define it as a resource and give it an x:Key. Dans l’exemple suivant, vous avez un Person objet avec une propriété de chaîne PersonNamenommée.In the following example, you have a Person object with a string property named PersonName. L' Person objet (dans la ligne affichée en surbrillance <src> qui contient l’élément) est défini dans SDKSamplel’espace de noms appelé.The Person object (in the line shown highlighted that contains the <src> element) is defined in the namespace called SDKSample.

<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:src="clr-namespace:SDKSample"
  SizeToContent="WidthAndHeight"
  Title="Simple Data Binding Sample">

  <Window.Resources>
    <src:Person x:Key="myDataSource" PersonName="Joe"/>
    <Style TargetType="{x:Type Label}">
      <Setter Property="DockPanel.Dock" Value="Top"/>
      <Setter Property="FontSize" Value="12"/>
    </Style>
    <Style TargetType="{x:Type TextBox}">
      <Setter Property="Width" Value="100"/>
      <Setter Property="Height" Value="25"/>
      <Setter Property="DockPanel.Dock" Value="Top"/>
    </Style>
    <Style TargetType="{x:Type TextBlock}">
      <Setter Property="Width" Value="100"/>
      <Setter Property="Height" Value="25"/>
      <Setter Property="DockPanel.Dock" Value="Top"/>
      <Setter Property="Padding" Value="3"/>
    </Style>
  </Window.Resources>
  <Border Margin="5" BorderBrush="Aqua" BorderThickness="1" Padding="8" CornerRadius="3">
    <DockPanel Width="200" Height="100" Margin="35">
      <Label>Enter a Name:</Label>
      <TextBox>
        <TextBox.Text>
          <Binding Source="{StaticResource myDataSource}" Path="PersonName"
                   UpdateSourceTrigger="PropertyChanged"/>
        </TextBox.Text>
      </TextBox>
      
      <Label>The name you entered:</Label>
      <TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=PersonName}"/>
    </DockPanel>
  </Border>
</Window>

Vous pouvez ensuite lier le TextBlock contrôle à l’objet dans XAMLXAML, comme le montre la ligne en surbrillance qui contient l' <TextBlock> élément.You can then bind the TextBlock control to the object in XAMLXAML, as the highlighted line that contains the <TextBlock> element shows.

Vous pouvez également utiliser la ObjectDataProvider classe, comme dans l’exemple suivant:Alternatively, you can use the ObjectDataProvider class, as in the following example:

<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:src="clr-namespace:SDKSample"
  xmlns:system="clr-namespace:System;assembly=mscorlib"
  SizeToContent="WidthAndHeight"
  Title="Simple Data Binding Sample">

  <Window.Resources>
    <ObjectDataProvider x:Key="myDataSource" ObjectType="{x:Type src:Person}">
      <ObjectDataProvider.ConstructorParameters>
        <system:String>Joe</system:String>
      </ObjectDataProvider.ConstructorParameters>
    </ObjectDataProvider>
    <Style TargetType="{x:Type Label}">
      <Setter Property="DockPanel.Dock" Value="Top"/>
      <Setter Property="FontSize" Value="12"/>
    </Style>
    <Style TargetType="{x:Type TextBox}">
      <Setter Property="Width" Value="100"/>
      <Setter Property="Height" Value="25"/>
      <Setter Property="DockPanel.Dock" Value="Top"/>
    </Style>
    <Style TargetType="{x:Type TextBlock}">
      <Setter Property="Width" Value="100"/>
      <Setter Property="Height" Value="25"/>
      <Setter Property="DockPanel.Dock" Value="Top"/>
    </Style>
  </Window.Resources>

  <Border Margin="25" BorderBrush="Aqua" BorderThickness="3" Padding="8">
    <DockPanel Width="200" Height="100">
      <Label>Enter a Name:</Label>
      <TextBox>
        <TextBox.Text>
          <Binding Source="{StaticResource myDataSource}" Path="Name"
                   UpdateSourceTrigger="PropertyChanged"/>
        </TextBox.Text>
      </TextBox>

      <Label>The name you entered:</Label>
      <TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=Name}"/>
    </DockPanel>
  </Border>
</Window>

Vous définissez la liaison de la même façon, car la ligne mise en surbrillance qui contient l' <TextBlock> élément s’affiche.You define the binding the same way, as the highlighted line that contains the <TextBlock> element shows.

Dans cet exemple, le résultat est le même: vous avez un TextBlock avec le contenu Joede texte.In this particular example, the result is the same: you have a TextBlock with the text content Joe. Toutefois, la ObjectDataProvider classe fournit des fonctionnalités telles que la possibilité de créer une liaison avec le résultat d’une méthode.However, the ObjectDataProvider class provides functionality such as the ability to bind to the result of a method. Vous pouvez choisir d’utiliser la ObjectDataProvider classe si vous avez besoin des fonctionnalités qu’elle fournit.You can choose to use the ObjectDataProvider class if you need the functionality it provides.

Toutefois, si vous effectuez une liaison à un objet qui a déjà été créé, vous devez définir dans DataContext le code, comme dans l’exemple suivant.However, if you are binding to an object that has already been created, you need to set the DataContext in code, as in the following example.

DataSet myDataSet;

private void OnInit(object sender, EventArgs e)
{
  string mdbFile = Path.Combine(AppDataPath, "BookData.mdb");
  string connString = string.Format(
      "Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", mdbFile);
  OleDbConnection conn = new OleDbConnection(connString);
  OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM BookTable;", conn);

  myDataSet = new DataSet();
  adapter.Fill(myDataSet, "BookTable");

  // myListBox is a ListBox control.
  // Set the DataContext of the ListBox to myDataSet
  myListBox.DataContext = myDataSet;
}
Private myDataSet As DataSet

Private Sub OnInit(ByVal sender As Object, ByVal e As EventArgs)
  Dim mdbFile As String = Path.Combine(AppDataPath, "BookData.mdb")
  Dim connString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", mdbFile)
  Dim conn As New OleDbConnection(connString)
  Dim adapter As New OleDbDataAdapter("SELECT * FROM BookTable;", conn)

  myDataSet = New DataSet()
  adapter.Fill(myDataSet, "BookTable")

  ' myListBox is a ListBox control.
  ' Set the DataContext of the ListBox to myDataSet
  myListBox.DataContext = myDataSet
End Sub

Pour accéder XMLXML aux données pour la liaison XmlDataProvider à l’aide de la classe, consultez lier aux données XML à l’aide d’un XMLDataProvider et de requêtes XPath.To access XMLXML data for binding using the XmlDataProvider class, see Bind to XML Data Using an XMLDataProvider and XPath Queries. Pour accéder XMLXML aux données pour la liaison ObjectDataProvider à l’aide de la classe, consultez les résultats de la requête bind to XDocument, XElement ou LINQ for XML.To access XMLXML data for binding using the ObjectDataProvider class, see Bind to XDocument, XElement, or LINQ for XML Query Results.

Pour plus d’informations sur les différentes façons de spécifier les données que vous liez, consultez spécifier la source de liaison.For information about many ways you can specify the data you are binding to, see Specify the Binding Source. Pour plus d’informations sur les types de données que vous pouvez lier ou sur la façon d’implémenter vos propres objets common language runtime (CLR) pour la liaison, consultez vue d’ensemble des sources de liaison.For information about what types of data you can bind to or how to implement your own common language runtime (CLR) objects for binding, see Binding Sources Overview.

Voir aussiSee also