Bereitstellen von Daten, um diese in XAML zu binden
In diesem Thema werden verschiedene Möglichkeiten erläutert, wie Sie Daten für die Bindung in Xaml (Extensible Application Markup Language) verfügbar machen können, je nach den Anforderungen Ihrer Anwendung.
Beispiel
Wenn Sie ein Common Language Runtime (CLR)-Objekt haben, an das Sie aus XAML binden möchten, können Sie es für die Bindung verfügbar machen, indem Sie es als Ressource definieren und ihm ein x:Key
zuweisen. Im folgenden Beispiel haben Sie ein Person
-Objekt mit einer Zeichenfolgeneigenschaft namens PersonName
. Das Person
-Objekt (in der hervorgehobenen Zeile, die das <src>
-Element enthält) wird im Namespace definiert, der SDKSample
genannt wird.
<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>
Anschließend können Sie das TextBlock-Steuerelement an das Objekt in XAML binden, wie die hervorgehobene Zeile zeigt, die das <TextBlock>
-Element enthält.
Alternativ können Sie die ObjectDataProvider Klasse wie im folgenden Beispiel verwenden:
<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>
Sie definieren die Bindung auf die gleiche Weise, wie die hervorgehobene Zeile, die das <TextBlock>
-Element enthält, zeigt.
In diesem speziellen Beispiel ist das Ergebnis dasselbe: Sie haben einen TextBlock mit dem Textinhalt Joe
. Die ObjectDataProvider-Klasse stellt jedoch Funktionen bereit, z. B. die Möglichkeit, eine Bindung an das Ergebnis einer Methode zu erstellen. Sie können die ObjectDataProvider-Klasse verwenden, wenn Sie die bereitgestellte Funktionalität benötigen.
Wenn Sie jedoch eine Bindung an ein bereits erstelltes Objekt erstellen, müssen Sie die DataContext
im Code festlegen, wie im folgenden Beispiel gezeigt.
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
Informationen zum Zugreifen auf XML-Daten für die Bindung mithilfe der XmlDataProvider-Klasse finden Sie unter Binden an XML-Daten mithilfe eines XMLDataProvider- und XPath-Abfragens. Informationen zum Zugreifen auf XML-Daten für die Bindung mithilfe der ObjectDataProvider-Klasse finden Sie unter Binden an XDocument, XElement oder LINQ für XML-Abfrageergebnisse.
Informationen zu vielen Möglichkeiten, wie Sie die Daten angeben können, an die Sie binden, finden Sie unter Angeben der Bindungsquelle. Informationen zu den Datentypen, an die Sie binden können, oder wie Sie ihre eigenen CLR-Objekte (Common Language Runtime) für die Bindung implementieren können, finden Sie unter Binding Sources Overview.
Weitere Informationen
.NET Desktop feedback