Поделиться через


Практическое руководство. Обеспечение доступности данных для привязки в XAML

Обновлен: Ноябрь 2007

В этом разделе обсуждаются различные способы, позволяющие сделать данные доступными для привязки в Язык XAML (Extensible Application Markup Language), в зависимости от потребностей приложения.

Пример

Если требуется осуществить привязку к объекту среда CLR (common language runtime) из XAML, одним из способов сделать этот объект доступным для привязки является определение его в качестве ресурса и присвоения ему атрибута x:Key. В следующем примере имеется объект Person со строковым свойством PersonName. Объект 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 необходимо задать в коде, как в следующем примере.

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

Полные примеры см. в разделах Простой пример привязки и Пример привязки к DataSet ADO.NET.

Сведения о доступе к данным XML для привязки с помощью класса XmlDataProvider см. в разделе Практическое руководство. Привязка к данным xml с помощью XMLDataProvider и запросов XPath. Сведения о доступе к данным XML для привязки с помощью класса ObjectDataProvider см. в разделе Практическое руководство. Привязка к XDocument, XElement или LINQ для результатов запросов XML.

Сведения о различных способах указания данных, к которым осуществляется привязка, см. в разделе Практическое руководство. Указание источника привязки. Сведения о том, к каким типам данных можно осуществить привязку, или как реализовать собственные объекты среда CLR (common language runtime) для привязки, см. в разделе Общие сведения об источниках привязки.

См. также

Основные понятия

Общие сведения о связывании данных

Другие ресурсы

Примеры привязки данных

Практические руководства по привязке данных