Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az adatkötésben a kötés forrásobjektuma arra az objektumra hivatkozik, amelyből adatokat szerez be. Ez a témakör a kötési forrás megadásának különböző módjait ismerteti.
példa
Ha több tulajdonságot köt egy közös forráshoz, a DataContext tulajdonságot szeretné használni, amely kényelmes módot kínál egy olyan hatókör létrehozására, amelyen belül az összes adathoz kötött tulajdonság örököl egy közös forrást.
Az alábbi példában az adatkörnyezet az alkalmazás gyökérelemén jön létre. Ez lehetővé teszi, hogy minden gyermekelem örökölje ezt az adatkörnyezetet. A kötés adatai egy egyéni adatosztályból származnak, NetIncome, amely közvetlenül egy leképezés útján van hivatkozva, és rendelkezik a incomeDataSourceerőforrás kulcsával.
<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>
Az alábbi példa a NetIncome osztály definícióját mutatja be.
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
Megjegyzés:
A fenti példa példányosítja az objektumot a jelölőnyelvben, és erőforrásként használja. Ha olyan objektumhoz szeretne kapcsolódni, amely már példányosított a kódban, programozott módon kell beállítania a DataContext tulajdonságot. Példáért lásd: Adatok elérhetővé tétele kötéshez az XAML.
Ha az egyes kötéseken explicit módon szeretné megadni a forrást, az alábbi lehetőségek közül választhat. Ezek elsőbbséget élveznek az örökölt adatkörnyezettel szemben.
| Ingatlan | Leírás |
|---|---|
| Source | Ezzel a tulajdonsággal állíthatja be a forrást egy objektum példányára. Ha nincs szüksége olyan hatókör létrehozására, amelyben több tulajdonság örökli ugyanazt az adatkörnyezetet, akkor a Source tulajdonság helyett használhatja a DataContext tulajdonságot. További információért lásd Source. |
| RelativeSource | Ez akkor hasznos, ha a forrást a kötési cél helyéhez viszonyítva szeretné megadni. Néhány gyakori eset, amikor ezt a tulajdonságot használhatja, ha az elem egyik tulajdonságát ugyanahhoz az elemhez egy másik tulajdonsághoz szeretné kötni, vagy ha stílusban vagy sablonban definiál kötést. További információért lásd RelativeSource. |
| ElementName | Meg kell adnia egy sztringet, amely azt az elemet jelöli, amelyhez kötést szeretne kötni. Ez akkor hasznos, ha az alkalmazás egy másik elemének tulajdonságához szeretne kapcsolódni. Ha például azt szeretné, hogy egy Slider szabályozza egy másik vezérlő magasságát az alkalmazásban, vagy ha a vezérlő Content értékét a SelectedValue vezérlő ListBox tulajdonságához szeretné kötni. További információért lásd ElementName. |
Lásd még
.NET Desktop feedback