Postupy: Zpřístupnění dat pro připojení v jazyku XAML

Toto téma popisuje různé způsoby zpřístupnění dat pro vazbu v jazyce XAML (Extensible Application Markup Language) v závislosti na potřebách vaší aplikace.

Příklad

Pokud máte objekt CLR (Common Language Runtime), se kterým chcete vytvořit vazbu z XAML, můžete objekt zpřístupnit pro vazbu tak, že ho definujete jako prostředek a dáte mu .x:Key V následujícím příkladu máte objekt s řetězcovou Person vlastností s názvem PersonName. Objekt Person (na řádku zobrazeném zvýrazněným, který obsahuje <src> prvek) je definován v oboru názvů s názvem 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>

Potom můžete svázat TextBlock ovládací prvek s objektem v XAML, protože zvýrazněný řádek, který obsahuje <TextBlock> prvek ukazuje.

Případně můžete použít ObjectDataProvider třídu, jako v následujícím příkladu:

<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>

Vazbu definujete stejným způsobem jako zvýrazněný řádek, který obsahuje <TextBlock> prvek.

V tomto konkrétním příkladu je výsledek stejný: máte s textovým obsahem TextBlockJoe. Třída však poskytuje funkce, ObjectDataProvider jako je schopnost vytvořit vazbu na výsledek metody. Pokud potřebujete funkce, které poskytuje, můžete použít ObjectDataProvider třídu.

Pokud však vytváříte vazbu na objekt, který již byl vytvořen, musíte nastavit DataContext v kódu, jako v následujícím příkladu.

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

Pokud chcete získat přístup k datům XML pro vazbu pomocí XmlDataProvider třídy, přečtěte si téma Bind to XML Data Using an XMLDataProvider and XPath Queries. Pokud chcete získat přístup k datům XML pro vazbu pomocí ObjectDataProvider třídy, přečtěte si téma Bind to XDocument, XElement nebo LINQ pro výsledky dotazu XML.

Informace o mnoha způsobech, jak zadat data, ke které vytváříte vazbu, naleznete v tématu Určení zdroje vazby. Informace o typech dat, ke které můžete vytvořit vazbu nebo jak implementovat vlastní objekty CLR (Common Language Runtime) pro vazbu, najdete v tématu Přehled zdrojů vazeb.

Viz také