Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam pengikatan data, objek sumber pengikatan mengacu pada objek tempat Anda mendapatkan data. Topik ini menjelaskan berbagai cara untuk menentukan sumber pengikatan.
Contoh
Jika Anda mengikat beberapa properti ke sumber umum, Anda ingin menggunakan properti DataContext, yang menyediakan cara mudah untuk membuat cakupan di mana semua properti terikat data mewarisi sumber umum.
Dalam contoh berikut, konteks data ditetapkan pada elemen akar aplikasi. Ini memungkinkan semua elemen anak untuk mewarisi konteks data tersebut. Data untuk pengikatan berasal dari kelas data kustom, NetIncome, dirujuk langsung melalui pemetaan dan diberikan kunci sumber daya incomeDataSource.
<Grid
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.DirectionalBinding"
xmlns:c="clr-namespace:SDKSample"
Name="Page1"
>
<Grid.Resources>
<c:NetIncome x:Key="incomeDataSource"/>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Padding" Value="8"/>
</Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Margin" Value="0,6,0,0"/>
</Style>
</Grid.Resources>
<Grid.DataContext>
<Binding Source="{StaticResource incomeDataSource}"/>
</Grid.DataContext>
</Grid>
Contoh berikut menunjukkan definisi kelas NetIncome.
public class NetIncome : INotifyPropertyChanged
{
private int totalIncome = 5000;
private int rent = 2000;
private int food = 0;
private int misc = 0;
private int savings = 0;
public NetIncome()
{
savings = totalIncome - (rent+food+misc);
}
public int TotalIncome
{
get
{
return totalIncome;
}
set
{
if( TotalIncome != value)
{
totalIncome = value;
OnPropertyChanged("TotalIncome");
}
}
}
public int Rent
{
get
{
return rent;
}
set
{
if( Rent != value)
{
rent = value;
OnPropertyChanged("Rent");
UpdateSavings();
}
}
}
public int Food
{
get
{
return food;
}
set
{
if( Food != value)
{
food = value;
OnPropertyChanged("Food");
UpdateSavings();
}
}
}
public int Misc
{
get
{
return misc;
}
set
{
if( Misc != value)
{
misc = value;
OnPropertyChanged("Misc");
UpdateSavings();
}
}
}
public int Savings
{
get
{
return savings;
}
set
{
if( Savings != value)
{
savings = value;
OnPropertyChanged("Savings");
UpdateSavings();
}
}
}
private void UpdateSavings()
{
Savings = TotalIncome - (Rent+Misc+Food);
if(Savings < 0)
{}
else if(Savings >= 0)
{}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(String info)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler !=null)
{
handler(this, new PropertyChangedEventArgs(info));
}
}
}
Public Class NetIncome
Implements INotifyPropertyChanged
' Events
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
' Methods
Public Sub New()
Me._totalIncome = 5000
Me._rent = 2000
Me._food = 0
Me._misc = 0
Me._savings = 0
Me._savings = (Me.TotalIncome - ((Me.Rent + Me.Food) + Me.Misc))
End Sub
Private Sub OnPropertyChanged(ByVal info As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
End Sub
Private Sub UpdateSavings()
Me.Savings = (Me.TotalIncome - ((Me.Rent + Me.Misc) + Me.Food))
If ((Me.Savings >= 0) AndAlso (Me.Savings >= 0)) Then
End If
End Sub
' Properties
Public Property Food As Integer
Get
Return Me._food
End Get
Set(ByVal value As Integer)
If (Me.Food <> value) Then
Me._food = value
Me.OnPropertyChanged("Food")
Me.UpdateSavings()
End If
End Set
End Property
Public Property Misc As Integer
Get
Return Me._misc
End Get
Set(ByVal value As Integer)
If (Me.Misc <> value) Then
Me._misc = value
Me.OnPropertyChanged("Misc")
Me.UpdateSavings()
End If
End Set
End Property
Public Property Rent As Integer
Get
Return Me._rent
End Get
Set(ByVal value As Integer)
If (Me.Rent <> value) Then
Me._rent = value
Me.OnPropertyChanged("Rent")
Me.UpdateSavings()
End If
End Set
End Property
Public Property Savings As Integer
Get
Return Me._savings
End Get
Set(ByVal value As Integer)
If (Me.Savings <> value) Then
Me._savings = value
Me.OnPropertyChanged("Savings")
Me.UpdateSavings()
End If
End Set
End Property
Public Property TotalIncome As Integer
Get
Return Me._totalIncome
End Get
Set(ByVal value As Integer)
If (Me.TotalIncome <> value) Then
Me._totalIncome = value
Me.OnPropertyChanged("TotalIncome")
End If
End Set
End Property
' Fields
Private _food As Integer
Private _misc As Integer
Private _rent As Integer
Private _savings As Integer
Private _totalIncome As Integer
End Class
Nota
Contoh di atas membuat instans objek dalam markup dan menggunakannya sebagai sumber daya. Jika Anda ingin mengikat ke objek yang telah dibuat dalam kode, Anda perlu mengatur properti DataContext secara terprogram. Misalnya, lihat Menyediakan Data untuk Pengikatan di XAML.
Atau, jika Anda ingin menentukan sumber pada pengikatan individual Anda secara eksplisit, Anda memiliki opsi berikut. Ini lebih diutamakan daripada konteks data yang diwariskan.
| Harta benda | Deskripsi |
|---|---|
| Source | Anda menggunakan properti ini untuk menetapkan sumber ke sebuah instans objek. Jika Anda tidak memerlukan fungsionalitas untuk membuat cakupan di mana beberapa properti mewarisi konteks data yang sama, Anda dapat menggunakan properti Source alih-alih properti DataContext. Untuk informasi selengkapnya, lihat Source . |
| RelativeSource | Ini berguna ketika Anda ingin menentukan sumber relatif terhadap di mana target pengikatan Anda berada. Beberapa skenario umum di mana Anda dapat menggunakan properti ini adalah ketika Anda ingin mengikat satu properti elemen Anda ke properti lain dari elemen yang sama atau jika Anda menentukan pengikatan dalam gaya atau templat. Untuk informasi selengkapnya, lihat RelativeSource . |
| ElementName | Anda menentukan string yang mewakili elemen yang ingin Anda ikat. Ini berguna ketika Anda ingin mengikat properti elemen lain pada aplikasi Anda. Misalnya, jika Anda ingin menggunakan Slider untuk mengontrol tinggi kontrol lain di aplikasi Anda, atau jika Anda ingin mengikat Content kontrol Anda ke properti SelectedValue kontrol ListBox Anda. Untuk informasi selengkapnya, lihat ElementName . |
Lihat juga
.NET Desktop feedback