BindingGroup Třída

Definice

Obsahuje kolekci vazeb a ValidationRule objektů, které se používají 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 provede následující kroky k dosažení tohoto chování.

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

  • Voláním BeginEdit, CommitEdita CancelEdit v logice aplikace povolíte vrácení změn zpět.

  • Zavolá TryGetValue metodu Validate , aby získala vstup uživatele a pak zkontroluje, jestli je položka nad 100 dolarů k dispozici po dobu nejméně sedmi dnů.

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

<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 zavolá CommitEdit ke spuštění každého ValidationRule , který je přidružený k objektu BindingGroup. Pokud je každý ValidationRule úspěšný, CommitEdit uloží hodnoty do objektu a ukončí transakci úprav. V případě CommitEdit úspěchu aplikace zahájí další transakci úprav. ValidationRule Při selhání dojde k události, Validation.Error protože aplikace je nastavená NotifyOnValidationErrortrueBindingGroup na hodnotu (v předchozím příkladu). ItemErrorValidation.Error zpracovává událost a zobrazí uživateli informace o chybě ověření. Příklad také zpracovává Loaded událost pro StackPanel a Click událost 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 souboru v prvním příkladu. BindingGroup Používá ValidationRule ve své Validate metodě k získání hodnot, které uživatel zadal do formuláře, a zkontroluje, že pokud je položka nad 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

Objekt vytvoří BindingGroup 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, hodnotami, které uživatel zadal. Aplikace má panel, který obsahuje čtyři TextBox ovládací prvky, z nichž každý je vázán na jednu z vlastností objektu. K ověření objektu ValidationRuleBindingGroup můžete použít objekt v objektu Address . Pokud se vazby účastní stejného BindingGroupsouboru , můžete zajistit, aby PSČ bylo platné pro zemi nebo oblast adresy.

Vlastnost nastavíte na BindingGroupFrameworkElement nebo FrameworkContentElement. Podřízené elementy dědí BindingGroup z nadřazených elementů, stejně jako u jakékoli jiné zděditelné vlastnosti. Vazba na element sestupně se přidá do objektu BindingGroup , pokud nastane jedna z následujících situací:

V příkladu adresy předpokládejme, že DataContext hodnota objektu Panel je nastavená na objekt typu Address. Vazba pro každou z nich TextBox se přidá do BindingGroup panelu.

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

Místo BindingGroup toho, aby se každá vazba aktualizovala samostatně, aktualizuje zdroje vazby současně. Když zavoláte jednu z metod ověření dat (ValidateWithoutUpdate, UpdateSourcesnebo CommitEdit), vazba pro každou z nich TextBox v příkladu se ověří a potenciálně se aktualizuje. Pokud je vazba součástí BindingGroup, zdroj vazby se neaktualizuje, dokud nezavoláte UpdateSources nebo CommitEdit na BindingGroup, pokud explicitně nenastavíte UpdateSourceTrigger vlastnost.

Konstruktory

BindingGroup()

Inicializuje novou instanci BindingGroup třídy.

Vlastnosti

BindingExpressions

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

CanRestoreValues

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

DependencyObjectType

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

(Zděděno od DependencyObject)
Dispatcher

Získá přidruženou Dispatcher k tomuto DispatcherObject .

(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 objektu BindingGroup.

NotifyOnValidationError

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

Owner

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

SharesProposedValues

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

ValidatesOnNotifyDataError

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

ValidationErrors

Získá kolekci ValidationError objektů, které způsobily BindingGroup , že je neplatný.

ValidationRules

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

Metody

BeginEdit()

Zahájí transakci úprav na zdrojích v objektu BindingGroup.

CancelEdit()

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

CheckAccess()

Určuje, zda má volající vlákno přístup k tomuto 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á se má vymazat, je určena parametrem DependencyPropertyKey.

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

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

(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 je zadaný DependencyObject ekvivalent k 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 DependencyObjectobjektu .

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

Získá aktuální Type instanci.

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

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

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

Vrátí navrhovanou 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 Objectsouboru .

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

Vyvolá se vždy, když byla aktualizována efektivní hodnota jakékoli vlastnosti závislosti na této DependencyObject vlastnosti. Specifická 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 hodnoty.

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

Nastaví místní hodnotu vlastnosti závislosti určenou 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 DependencyPropertyKey identifikátorem vlastnosti závislosti.

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

Vrátí hodnotu, která označuje, zda serializační procesy 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 navrhovanou hodnotu pro zadanou vlastnost a položku.

UpdateSources()

Spustí převaděč na vazbě a ValidationRule objekty, které mají ValidationStep vlastnost 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ěč pro vazbu a ValidationRule objekty, které mají vlastnost nastavenou ValidationStep na RawProposedValue nebo ConvertedProposedValue.

VerifyAccess()

Vynutí, aby volající vlákno má přístup k tomuto DispatcherObject.

(Zděděno od DispatcherObject)

Platí pro