Partager via


Comment rendre les données disponibles pour la liaison de données dans XAML

Cette rubrique décrit différentes façons de rendre les données disponibles pour la liaison dans XAML (Extensible Application Markup Language), en fonction des besoins de votre application.

Exemple

Si vous avez un objet CLR (Common Language Runtime) auquel vous souhaitez établir une liaison à partir de XAML, une façon de rendre l’objet disponible pour la liaison est de le définir en tant que ressource et de lui donner une x:Key. Dans l’exemple suivant, vous avez un objet Person avec une propriété de chaîne nommée PersonName. L’objet Person (dans la ligne affichée en surbrillance qui contient l’élément <src>) est défini dans l’espace de noms appelé 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 contrôle TextBlock à l’objet en XAML, comme le montre la ligne mise en surbrillance qui contient l’élément <TextBlock>.

Vous pouvez également utiliser la classe ObjectDataProvider, comme dans l’exemple suivant :

<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 manière que le montre la ligne mise en surbrillance contenant l’élément <TextBlock>.

Dans cet exemple particulier, le résultat est le même : vous avez un TextBlock avec le contenu texte Joe. Toutefois, la classe ObjectDataProvider fournit des fonctionnalités telles que la possibilité de lier au résultat d’une méthode. Vous pouvez choisir d’utiliser la classe ObjectDataProvider si vous avez besoin des fonctionnalités qu’elle fournit.

Toutefois, si vous établissez une liaison à un objet qui a déjà été créé, vous devez définir la DataContext dans le code, comme dans l’exemple suivant.

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 aux données XML pour la liaison à l’aide de la classe XmlDataProvider, consultez Lier aux données XML à l’aide d’un XMLDataProvider et de requêtes XPath. Pour accéder aux données XML pour la liaison à l’aide de la classe ObjectDataProvider, consultez Liaison avec XDocument, XElement ou LINQ pour les résultats de requêtes XML.

Pour plus d’informations sur de nombreuses façons de spécifier les données à laquelle vous vous liez, consultez Spécifier la source de liaison. Pour plus d’informations sur les types de données auxquels vous pouvez établir une liaison ou comment implémenter vos propres objets CLR (Common Language Runtime) pour la liaison, consultez Vue d’ensemble des sources de liaison.

Voir aussi

  • Vue d’ensemble de la liaison de données
  • Sujets de type 'Comment faire'