Aracılığıyla paylaş


Nasıl yapılır: XAML'de Bağlama için Veriyi Kullanılabilir Yapma

Bu konu başlığı altında, uygulamanızın gereksinimlerine bağlı olarak Genişletilebilir Uygulama Biçimlendirme Dili'nde (XAML) verileri bağlama için kullanılabilir hale getirmenin çeşitli yolları açıklanmaktadır.

Örnek

XAML'den bağlamak istediğiniz ortak dil çalışma zamanı (CLR) nesneniz varsa, nesneyi bağlama için kullanılabilir hale getirmenin bir yolu onu kaynak olarak tanımlamak ve vermektir x:Key. Aşağıdaki örnekte, adlı PersonNamedize Person özelliğine sahip bir nesneniz vardır. Person nesnesi (öğesini içeren <src> vurgulanmış olarak gösterilen satırda) adlı SDKSamplead alanında tanımlanır.

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

Ardından, öğesini içeren vurgulanan satırda gösterildiği gibi denetimi XAML'deki nesneye <TextBlock> bağlayabilirsinizTextBlock.

Alternatif olarak, aşağıdaki örnekte olduğu gibi sınıfını kullanabilirsiniz ObjectDataProvider :

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

Bağlamayı, öğesini içeren <TextBlock> vurgulanmış satırda gösterildiği gibi tanımlarsınız.

Bu özel örnekte sonuç aynıdır: metin içeriğiyle Joebir TextBlock değeriniz vardır. Ancak sınıfı, ObjectDataProvider bir yöntemin sonucuna bağlanma yeteneği gibi işlevler sağlar. Sağladığı işlevlere ihtiyacınız varsa sınıfını kullanmayı ObjectDataProvider seçebilirsiniz.

Ancak, önceden oluşturulmuş bir nesneye bağlanıyorsanız, aşağıdaki örnekte olduğu gibi kodda değerini ayarlamanız DataContext gerekir.

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

sınıfını kullanarak bağlamaya yönelik XML verilerine XmlDataProvider erişmek için bkz . XMLDataProvider ve XPath Sorguları Kullanarak XML Verilerine Bağlama. sınıfını kullanarak bağlamaya yönelik XML verilerine ObjectDataProvider erişmek için bkz . XML Sorgu Sonuçları için XDocument, XElement veya LINQ bağlama.

Bağladığınız verileri belirtebileceğiniz birçok yol hakkında bilgi için bkz . Bağlama Kaynağını Belirtme. Bağlanabileceğiniz veri türleri veya bağlama için kendi ortak dil çalışma zamanı (CLR) nesnelerinizi uygulama hakkında bilgi için bkz . Bağlama Kaynaklarına Genel Bakış.

Ayrıca bkz.