Практическое руководство. Обеспечение доступности данных для привязки в XAML
В этом разделе обсуждаются различные способы, позволяющие сделать данные доступными для привязки в Extensible Application Markup Language (XAML), в зависимости от потребностей приложения.
Пример
Если требуется осуществить привязку к объекту common language runtime (CLR) из 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 необходимо задать в коде, как в следующем примере.
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;
}
Сведения о доступе к данным XML для привязки с помощью класса XmlDataProvider см. в разделе Практическое руководство. Привязка к данным xml с помощью XMLDataProvider и запросов XPath. Сведения о доступе к данным XML для привязки с помощью класса ObjectDataProvider см. в разделе Практическое руководство. Привязка к XDocument, XElement или LINQ для результатов запросов XML.
Сведения о различных способах указания данных, к которым осуществляется привязка, см. в разделе Практическое руководство. Указание источника привязки. Сведения о том, к каким типам данных можно осуществить привязку, или как реализовать собственные объекты common language runtime (CLR) для привязки, см. в разделе Общие сведения об источниках привязки.
См. также
Основные понятия
Общие сведения о связывании данных