Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Zdrojový objekt vazby v datové vazbě odkazuje na objekt, ze který získáváte data. Toto téma popisuje různé způsoby určení zdroje vazby.
Příklad
Pokud vytváříte vazbu několika vlastností na společný zdroj, chcete použít vlastnost DataContext, která poskytuje pohodlný způsob, jak vytvořit obor, ve kterém všechny vlastnosti vázané na data dědí společný zdroj.
V následujícím příkladu je kontext dat vytvořen v kořenovém prvku aplikace. To umožňuje, aby všechny podřízené prvky dědily tento kontext dat. Data pro vazbu pocházejí z uživatelské datové třídy, NetIncome, která je přímo odkazována prostřednictvím mapování a přiřazena klíči prostředku 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>
Následující příklad ukazuje definici NetIncome třídy.
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
Poznámka:
Výše uvedený příklad vytvoří instanci objektu v kódu a použije ho jako prostředek. Pokud chcete vytvořit vazbu na objekt, který již byl vytvořen v kódu, je nutné programově nastavit vlastnost DataContext. Příklad viz Zpřístupnění dat pro vazbu v XAML.
Pokud chcete zdroj pro jednotlivé vazby explicitně zadat, máte následující možnosti. Mají přednost před zděděným kontextem dat.
| Vlastnictví | Popis |
|---|---|
| Source | Tuto vlastnost použijete k nastavení zdroje na instanci objektu. Pokud nepotřebujete funkci vytvoření oboru, ve kterém několik vlastností dědí stejný kontext dat, můžete místo vlastnosti Source použít vlastnost DataContext. Další informace najdete v tématu Source. |
| RelativeSource | To je užitečné, když chcete určit zdroj vzhledem k tomu, kde je cíl vazby. Některé běžné scénáře, kdy můžete tuto vlastnost použít, je, když chcete vytvořit vazbu jedné vlastnosti prvku na jinou vlastnost stejného elementu nebo pokud definujete vazbu ve stylu nebo šabloně. Další informace najdete v tématu RelativeSource. |
| ElementName | Zadáte řetězec, který představuje prvek, ke kterému chcete vytvořit vazbu. To je užitečné, když chcete vytvořit vazbu na vlastnost jiného prvku v aplikaci. Pokud například chcete použít Slider k řízení výšky jiného ovládacího prvku v aplikaci nebo pokud chcete svázat Content ovládacího prvku s vlastností SelectedValue ovládacího prvku ListBox. Další informace najdete v tématu ElementName. |
Viz také
- FrameworkElement.DataContext
- FrameworkContentElement.DataContext
- Dědičnost Hodnoty Vlastnosti
- Přehled datových vazeb
- Přehled deklarací vazeb
- Návodná témata
.NET Desktop feedback