Sdílet prostřednictvím


BindingGroup Třída

Definice

Obsahuje kolekci vazeb a ValidationRule objektů, které slouží k ověření objektu.

public ref class BindingGroup : System::Windows::DependencyObject
public class BindingGroup : System.Windows.DependencyObject
type BindingGroup = class
    inherit DependencyObject
Public Class BindingGroup
Inherits DependencyObject
Dědičnost

Příklady

Následující příklady vytvoří aplikaci, která uživatele vyzve k zadání popisu a ceny položky a data vypršení platnosti nabídky. Aplikace zobrazí aktuální informace o položce pod formulářem. Uživatel může změny odeslat nebo zrušit.

Aplikace k dosažení tohoto chování provede následující kroky.

  • Vytvoří BindingGroup a přidá ji do kořenového StackPanel při vytváření uživatelského rozhraní aplikace.

  • Volá BeginEdit, CommitEdita CancelEdit v logice aplikace, aby bylo možné vrátit zpět změny.

  • Zavolá TryGetValue v metodě Validate, aby získal vstup uživatele, a pak zkontroluje, jestli je položka nad 100 dolarů k dispozici alespoň sedm dní.

Následující příklad vytvoří uživatelské rozhraní aplikace. Kořenový StackPanelBindingGroup, který obsahuje ValidationRule, který položku ověří, jak je popsáno výše. Objekty vazby ve vlastnosti Price a vlastnost OfferExpires se stanou součástí BindingGroup a každá vazba má ValidationRule, aby se zajistilo, že cena a datum jsou platné hodnoty. Ověřovací pravidla pro jednotlivé vlastnosti se spouští před ValidationRule v BindingGroup.

<StackPanel Name="stackPanel1"  Margin="10" Width="250"
            Loaded="stackPanel1_Loaded"
            Validation.Error="ItemError">

  <StackPanel.Resources>
    <Style TargetType="HeaderedContentControl">
      <Setter Property="Margin" Value="2"/>
      <Setter Property="Focusable" Value="False"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="HeaderedContentControl">
            <DockPanel LastChildFill="False">
              <ContentPresenter ContentSource="Header" DockPanel.Dock="Left" Focusable="False" VerticalAlignment="Center"/>
              <ContentPresenter ContentSource="Content" Margin="5,0,0,0" DockPanel.Dock="Right" VerticalAlignment="Center"/>
            </DockPanel>

          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>

    <Style TargetType="Button">
      <Setter Property="Width" Value="100"/>
      <Setter Property="Margin" Value="10,15,15,15"/>

    </Style>

  </StackPanel.Resources>
  
  <StackPanel.BindingGroup>
    <BindingGroup NotifyOnValidationError="True">
      <BindingGroup.ValidationRules>
        <src:ValidateDateAndPrice ValidationStep="ConvertedProposedValue" />
      </BindingGroup.ValidationRules>
    </BindingGroup>
  </StackPanel.BindingGroup>
  
  <TextBlock FontSize="14" Text="Enter an item for sale"/>
  <HeaderedContentControl Header="Description">
    <TextBox Width="150" Text="{Binding Path=Description, Mode=TwoWay}"/>
  </HeaderedContentControl>
  <HeaderedContentControl Header="Price">
    <TextBox Name="priceField"  Width="150">
      <TextBox.Text>
        <Binding Path="Price" Mode="TwoWay" >
          <Binding.ValidationRules>
            <src:PriceIsAPositiveNumber/>
          </Binding.ValidationRules>
        </Binding>
      </TextBox.Text>
    </TextBox>
  </HeaderedContentControl>
  <HeaderedContentControl Header="Date Offer Ends">
    <TextBox Name="dateField" Width="150" >
      <TextBox.Text>
        <Binding Path="OfferExpires" StringFormat="d" >
          <Binding.ValidationRules>
            <src:FutureDateRule/>
          </Binding.ValidationRules>
        </Binding>
      </TextBox.Text>
    </TextBox>
  </HeaderedContentControl>
  <StackPanel Orientation="Horizontal">
    <Button IsDefault="True" Click="Submit_Click">_Submit</Button>
    <Button IsCancel="True" Click="Cancel_Click">_Cancel</Button>
  </StackPanel>
  <HeaderedContentControl Header="Description">
    <TextBlock Width="150" Text="{Binding Path=Description}"/>
  </HeaderedContentControl>
  <HeaderedContentControl Header="Price">
    <TextBlock Width="150" Text="{Binding Path=Price, StringFormat=c}"/>
  </HeaderedContentControl>
  <HeaderedContentControl Header="Date Offer Ends">
    <TextBlock Width="150" Text="{Binding Path=OfferExpires, StringFormat=d}"/>
  </HeaderedContentControl>
</StackPanel>

Následující příklad ukazuje obslužné rutiny událostí pro aplikaci. Když uživatel klikne na tlačítko Odeslat, aplikace volá CommitEdit ke spuštění každého ValidationRule, který je přidružený k BindingGroup. Pokud bude každý ValidationRule úspěšný, CommitEdit uloží hodnoty do objektu a ukončí transakci úprav. Pokud CommitEdit úspěšně, aplikace zahájí další transakci úprav. Když ValidationRule selže, dojde k události Validation.Error, protože aplikace nastavená NotifyOnValidationError na true na BindingGroup (v předchozím příkladu). ItemError zpracovává událost Validation.Error a zobrazuje uživateli informace o chybě ověření. Příklad také zpracovává událost Loaded pro StackPanel a událost Click pro tlačítko Zrušit.


private void Submit_Click(object sender, RoutedEventArgs e)
{
    if (stackPanel1.BindingGroup.CommitEdit())
    {
        MessageBox.Show("Item submitted");
        stackPanel1.BindingGroup.BeginEdit();
    }
}

// This event occurs when a ValidationRule in the BindingGroup
// or in a Binding fails.
private void ItemError(object sender, ValidationErrorEventArgs e)
{
    if (e.Action == ValidationErrorEventAction.Added)
    {
        MessageBox.Show(e.Error.ErrorContent.ToString());
    }
}

void stackPanel1_Loaded(object sender, RoutedEventArgs e)
{
    // Set the DataContext to a PurchaseItem object.
    // The BindingGroup and Binding objects use this as
    // the source.
    stackPanel1.DataContext = new PurchaseItem();

    // Begin an edit transaction that enables
    // the object to accept or roll back changes.
    stackPanel1.BindingGroup.BeginEdit();
}

private void Cancel_Click(object sender, RoutedEventArgs e)
{
    // Cancel the pending changes and begin a new edit transaction.
    stackPanel1.BindingGroup.CancelEdit();
    stackPanel1.BindingGroup.BeginEdit();
}

Private Sub Submit_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If stackPanel1.BindingGroup.CommitEdit() Then
        MessageBox.Show("Item submitted")
        stackPanel1.BindingGroup.BeginEdit()
    End If


End Sub

' This event occurs when a ValidationRule in the BindingGroup
' or in a Binding fails.
Private Sub ItemError(ByVal sender As Object, ByVal e As ValidationErrorEventArgs)
    If e.Action = ValidationErrorEventAction.Added Then
        MessageBox.Show(e.Error.ErrorContent.ToString())

    End If
End Sub

Private Sub stackPanel1_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
    ' Set the DataContext to a PurchaseItem object.
    ' The BindingGroup and Binding objects use this as
    ' the source.
    stackPanel1.DataContext = New PurchaseItem()

    ' Begin an edit transaction that enables
    ' the object to accept or roll back changes.
    stackPanel1.BindingGroup.BeginEdit()
End Sub

Private Sub Cancel_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    ' Cancel the pending changes and begin a new edit transaction.
    stackPanel1.BindingGroup.CancelEdit()
    stackPanel1.BindingGroup.BeginEdit()
End Sub

Následující příklad ukazuje vlastní ValidationRuleValidateDateAndPrice, který byl přidán do BindingGroup v prvním příkladu. ValidationRule používá BindingGroup ve své Validate metodě k získání hodnot, které uživatel zadal do formuláře, a zkontroluje, že pokud je položka více než 100 dolarů, bude k dispozici nejméně sedm dní.

public class ValidateDateAndPrice : ValidationRule
{
    // Ensure that an item over $100 is available for at least 7 days.
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        BindingGroup bg = value as BindingGroup;

        // Get the source object.
        PurchaseItem item = bg.Items[0] as PurchaseItem;
        
        object doubleValue;
        object dateTimeValue;

        // Get the proposed values for Price and OfferExpires.
        bool priceResult = bg.TryGetValue(item, "Price", out doubleValue);
        bool dateResult = bg.TryGetValue(item, "OfferExpires", out dateTimeValue);

        if (!priceResult || !dateResult)
        {
            return new ValidationResult(false, "Properties not found");
        }

        double price = (double)doubleValue;
        DateTime offerExpires = (DateTime)dateTimeValue;

        // Check that an item over $100 is available for at least 7 days.
        if (price > 100)
        {
            if (offerExpires < DateTime.Today + new TimeSpan(7, 0, 0, 0))
            {
                return new ValidationResult(false, "Items over $100 must be available for at least 7 days.");
            }
        }

        return ValidationResult.ValidResult;
    }
}
Public Class ValidateDateAndPrice
    Inherits ValidationRule
    ' Ensure that an item over $100 is available for at least 7 days.
    Public Overrides Function Validate(ByVal value As Object, ByVal cultureInfo As CultureInfo) As ValidationResult
        Dim bg As BindingGroup = TryCast(value, BindingGroup)

        ' Get the source object.
        Dim item As PurchaseItem = TryCast(bg.Items(0), PurchaseItem)

        Dim doubleValue As Object = Nothing
        Dim dateTimeValue As Object = Nothing

        ' Get the proposed values for Price and OfferExpires.
        Dim priceResult As Boolean = bg.TryGetValue(item, "Price", doubleValue)
        Dim dateResult As Boolean = bg.TryGetValue(item, "OfferExpires", dateTimeValue)

        If (Not priceResult) OrElse (Not dateResult) Then
            Return New ValidationResult(False, "Properties not found")
        End If

        Dim price As Double = CDbl(doubleValue)
        Dim offerExpires As Date = CDate(dateTimeValue)

        ' Check that an item over $100 is available for at least 7 days.
        If price > 100 Then
            If offerExpires < Date.Today + New TimeSpan(7, 0, 0, 0) Then
                Return New ValidationResult(False, "Items over $100 must be available for at least 7 days.")
            End If
        End If

        Return ValidationResult.ValidResult

    End Function
End Class

Poznámky

BindingGroup vytvoří relaci mezi více vazbami, které je možné ověřit a aktualizovat společně. Předpokládejme například, že aplikace vyzve uživatele k zadání adresy. Aplikace pak naplní objekt typu Address, který má vlastnosti, Street, City, ZipCodea Country, s hodnotami, které uživatel zadal. Aplikace má panel, který obsahuje čtyři ovládací prvky TextBox, z nichž každá je data svázaná s jednou z vlastností objektu. K ověření objektu Address můžete použít ValidationRule v BindingGroup. Pokud se vazby účastní stejné BindingGroup, můžete zajistit, aby psč byl platný pro zemi nebo oblast adresy.

Vlastnost BindingGroup nastavíte na FrameworkElement nebo FrameworkContentElement. Podřízené prvky dědí BindingGroup z nadřazených prvků stejně jako u jakékoli jiné zděděné vlastnosti. Vazba sestupně se přidá do BindingGroup v případě, že dojde k některé z následujících situací:

V příkladu adresy předpokládejme, že DataContextPanel je nastaven na objekt typu Address. Vazba pro každý TextBox se přidá do BindingGroup panelu.

Objekty ValidationRule přidáte do BindingGroup. Při spuštění ValidationRule se BindingGroup předá jako první parametr metody Validate. Pomocí metody TryGetValue nebo GetValue(Object, String) na této BindingGroup můžete získat navrhované hodnoty objektu a vlastnost Items získat zdroje vazeb.

BindingGroup aktualizuje zdroje vazby ve stejnou dobu, místo aby se jednotlivé vazby aktualizovaly samostatně. Při volání jedné z metod ověření dat (ValidateWithoutUpdate, UpdateSourcesnebo CommitEdit), vazba pro každou TextBox v příkladu je ověřena a potenciálně aktualizována. Pokud je vazba součástí BindingGroup, zdroj vazby se neaktualizuje, dokud nevoláte UpdateSources nebo CommitEdit na BindingGroup, pokud explicitně nenastavíte vlastnost UpdateSourceTrigger.

Konstruktory

BindingGroup()

Inicializuje novou instanci BindingGroup třídy.

Vlastnosti

BindingExpressions

Získá kolekci BindingExpression objektů, které obsahují informace pro každou vazbu v BindingGroup.

CanRestoreValues

Získá, zda každý zdroj v vazbě může zahodit čekající změny a obnovit původní hodnoty.

DependencyObjectType

Získá DependencyObjectType, který zabalí typ CLR této instance.

(Zděděno od DependencyObject)
Dispatcher

Získá Dispatcher tento DispatcherObject je přidružen.

(Zděděno od DispatcherObject)
HasValidationError

Získá hodnotu, která označuje, zda BindingGroup má neúspěšné ověřovací pravidlo.

IsDirty

Získá nebo nastaví hodnotu, která označuje, zda BindingGroup obsahuje navrženou hodnotu, která nebyla zapsána do zdroje.

IsSealed

Získá hodnotu, která označuje, zda je tato instance aktuálně zapečetěna (jen pro čtení).

(Zděděno od DependencyObject)
Items

Získá zdroje, které jsou používány Binding objekty v BindingGroup.

Name

Získá nebo nastaví název, který identifikuje BindingGroup, který lze použít k zahrnutí a vyloučení Binding objekty v BindingGroup.

NotifyOnValidationError

Získá nebo nastaví, zda Error událost nastane, když se změní stav ValidationRule.

Owner

Získá objekt, ke kterému je tento BindingGroup přiřazen.

SharesProposedValues

Získá nebo nastaví hodnotu, která označuje, zda BindingGroup opakovaně používá cílové hodnoty, které nebyly potvrzeny do zdroje.

ValidatesOnNotifyDataError

Získá nebo nastaví hodnotu, která určuje, zda zahrnout NotifyDataErrorValidationRule.

ValidationErrors

Získá kolekci ValidationError objektů, které způsobily BindingGroup být neplatné.

ValidationRules

Získá kolekci ValidationRule objektů, které ověřují zdrojové objekty v BindingGroup.

Metody

BeginEdit()

Začíná upravit transakce na zdrojích v BindingGroup.

CancelEdit()

Ukončí transakci úprav a zahodí čekající změny.

CheckAccess()

Určuje, zda volající vlákno má přístup k této DispatcherObject.

(Zděděno od DispatcherObject)
ClearValue(DependencyProperty)

Vymaže místní hodnotu vlastnosti. Vlastnost, která se má vymazat, je určena identifikátorem DependencyProperty.

(Zděděno od DependencyObject)
ClearValue(DependencyPropertyKey)

Vymaže místní hodnotu vlastnosti jen pro čtení. Vlastnost, která má být vymazána, je určena DependencyPropertyKey.

(Zděděno od DependencyObject)
CoerceValue(DependencyProperty)

Převede hodnotu zadané vlastnosti závislosti. Toho lze dosáhnout vyvoláním jakékoli CoerceValueCallback funkce zadané v metadatech vlastnosti pro vlastnost závislost, protože existuje ve volajícím DependencyObject.

(Zděděno od DependencyObject)
CommitEdit()

Spustí všechny ValidationRule objekty a aktualizuje zdroje vazeb, pokud jsou všechna ověřovací pravidla úspěšná.

Equals(Object)

Určuje, zda zadaný DependencyObject odpovídá aktuálnímu DependencyObject.

(Zděděno od DependencyObject)
GetHashCode()

Získá hash kód pro tento DependencyObject.

(Zděděno od DependencyObject)
GetLocalValueEnumerator()

Vytvoří specializovaný enumerátor pro určení vlastností závislostí, které mají místně nastavené hodnoty v tomto DependencyObject.

(Zděděno od DependencyObject)
GetType()

Získá Type aktuální instance.

(Zděděno od Object)
GetValue(DependencyProperty)

Vrátí aktuální efektivní hodnotu vlastnosti závislosti na této instanci DependencyObject.

(Zděděno od DependencyObject)
GetValue(Object, String)

Vrátí navrženou hodnotu pro zadanou vlastnost a položku.

InvalidateProperty(DependencyProperty)

Znovu vyhodnotí efektivní hodnotu pro zadanou vlastnost závislosti.

(Zděděno od DependencyObject)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Vyvolána vždy, když byla aktualizována efektivní hodnota jakékoli vlastnosti závislosti na této DependencyObject. Konkrétní vlastnost závislosti, která se změnila, je hlášena v datech události.

(Zděděno od DependencyObject)
ReadLocalValue(DependencyProperty)

Vrátí místní hodnotu vlastnosti závislosti, pokud existuje.

(Zděděno od DependencyObject)
SetCurrentValue(DependencyProperty, Object)

Nastaví hodnotu vlastnosti závislosti beze změny jejího zdroje hodnot.

(Zděděno od DependencyObject)
SetValue(DependencyProperty, Object)

Nastaví místní hodnotu vlastnosti závislosti určenou jeho identifikátorem vlastnosti závislosti.

(Zděděno od DependencyObject)
SetValue(DependencyPropertyKey, Object)

Nastaví místní hodnotu vlastnosti závislosti jen pro čtení určenou identifikátorem DependencyPropertyKey vlastnosti závislosti.

(Zděděno od DependencyObject)
ShouldSerializeProperty(DependencyProperty)

Vrátí hodnotu, která určuje, zda procesy serializace mají serializovat hodnotu pro zadanou vlastnost závislosti.

(Zděděno od DependencyObject)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
TryGetValue(Object, String, Object)

Pokusí se získat navrženou hodnotu pro zadanou vlastnost a položku.

UpdateSources()

Spustí převaděč na vazbě a objekty ValidationRule, které mají vlastnost ValidationStep nastavenou na RawProposedValue, ConvertedProposedValuenebo UpdatedValue a uloží hodnoty cílů do zdrojových objektů, pokud jsou všechna ověřovací pravidla úspěšná.

ValidateWithoutUpdate()

Spustí převaděč na vazbě a objekty ValidationRule, které mají vlastnost ValidationStep nastavenou na RawProposedValue nebo ConvertedProposedValue.

VerifyAccess()

Vynucuje, že volající vlákno má přístup k tomuto DispatcherObject.

(Zděděno od DispatcherObject)

Platí pro