Postupy: Určení zdroje připojení

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 DataContext vlastnost, 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 vlastní datové třídy , NetIncomeodkazované přímo prostřednictvím mapování a vzhledem k klíči incomeDataSourceprostředku .

<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 k objektu, který již byl v kódu vytvořena instance, musíte vlastnost nastavit DataContext programově. Příklad najdete v tématu Zpřístupnění dat pro vazbu v JAZYCE 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.

Vlastnost 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ý datový kontext, můžete místo vlastnosti použít Source vlastnost DataContext . Další informace najdete na webu 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 na webu 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 ovládací prvek k řízení výšky jiného ovládacího prvku v aplikaci nebo chcete vytvořit vazbu Content ovládacího prvku na SelectedValue vlastnost ListBox ovládacího prvku. Další informace najdete na webu ElementName.

Viz také