Cara: Membuat Data Tersedia untuk Pengikatan di XAML
Topik ini membahas berbagai cara Anda dapat membuat data tersedia untuk pengikatan dalam Extensible Application Markup Language (XAML), tergantung pada kebutuhan aplikasi Anda.
Contoh
Jika Anda memiliki objek runtime bahasa umum (CLR) yang ingin Anda ikat dari XAML, salah satu cara Anda dapat membuat objek tersedia untuk pengikatan adalah dengan mendefinisikannya sebagai sumber daya dan memberinya x:Key
. Dalam contoh berikut, Anda memiliki Person
objek dengan properti string bernama PersonName
. Objek Person
(dalam baris yang ditampilkan disorot yang berisi <src>
elemen) ditentukan dalam namespace yang disebut SDKSample
.
<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>
Anda kemudian dapat mengikat TextBlock kontrol ke objek di XAML, seperti baris yang disorot yang berisi elemen yang ditunjukkan <TextBlock>
.
Atau, Anda dapat menggunakan ObjectDataProvider kelas , seperti dalam contoh berikut:
<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>
Anda menentukan pengikatan dengan cara yang sama, seperti baris yang disorot yang berisi elemen yang ditunjukkan <TextBlock>
.
Dalam contoh khusus ini, hasilnya sama: Anda memiliki TextBlock dengan konten Joe
teks . Namun, ObjectDataProvider kelas menyediakan fungsionalitas seperti kemampuan untuk mengikat hasil metode. Anda dapat memilih untuk menggunakan ObjectDataProvider kelas jika Anda memerlukan fungsionalitas yang disediakannya.
Namun, jika Anda mengikat ke objek yang telah dibuat, Anda perlu mengatur DataContext
dalam kode, seperti dalam contoh berikut.
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
Untuk mengakses data XML untuk pengikatan menggunakan XmlDataProvider kelas , lihat Mengikat ke Data XML Menggunakan KUERI XMLDataProvider dan XPath. Untuk mengakses data XML untuk pengikatan menggunakan ObjectDataProvider kelas , lihat Mengikat ke XDocument, XElement, atau LINQ untuk Hasil Kueri XML.
Untuk informasi tentang banyak cara Anda dapat menentukan data yang Anda ikat, lihat Menentukan Sumber Pengikatan. Untuk informasi tentang jenis data apa yang dapat Anda ikat atau cara menerapkan objek runtime bahasa umum (CLR) Anda sendiri untuk pengikatan, lihat Gambaran Umum Sumber Pengikatan.
Baca juga
.NET Desktop feedback