如何:使数据可用于 XAML 中的绑定

本主题讨论使数据可用于在Extensible Application Markup Language (XAML) 中绑定的不同方式,具体使用哪种方式取决于您的应用程序需要。

示例

如果您具有一个common language runtime (CLR) 对象,并希望从 XAML 绑定到该对象,使该对象可用于绑定的一种方式就是将其定义为资源,并为其赋予 x:Key。 在下面的示例中,假设您具有一个字符串属性名为 PersonName 的 Person 对象。 Person 对象是在名为 SDKSample 的命名空间中定义的。

<Window
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://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"/>


...


</Window.Resources>

然后,您可以绑定到 XAML 中的对象,如下例所示。

<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=PersonName}"/>

您也可以使用 ObjectDataProvider 类,如下例所示。

<ObjectDataProvider x:Key="myDataSource" ObjectType="{x:Type src:Person}">
  <ObjectDataProvider.ConstructorParameters>
    <system:String>Joe</system:String>
  </ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>

您以相同的方式定义绑定:

<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=PersonName}"/>

在此特定示例中,结果是相同的:您具有一个 TextBlock,其文本内容为 Joe。 不过,ObjectDataProvider 类提供诸如绑定到方法的结果等功能。 如果需要 ObjectDataProvider 类提供的功能,您可以选择使用该类。

不过,如果要绑定到已经创建的对象,则您需要以代码形式设置 DataContext,如下例所示。

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

若要使用 XmlDataProvider 类访问用于绑定的 XML 数据,请参见如何:使用 XMLDataProvider 和 XPath 查询绑定到 XML 数据。 若要使用 ObjectDataProvider 类访问用于绑定的 XML 数据,请参见如何:绑定到 XDocument、XElement 或 LINQ for XML 查询结果

有关要绑定到的数据的不同指定方式的信息,请参见如何:指定绑定源。 有关您可以绑定到的数据类型及如何实现自己的common language runtime (CLR) 对象以用于绑定的信息,请参见绑定源概述

请参见

概念

数据绑定概述

其他资源

数据绑定帮助主题