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 provede následující kroky k dosažení tohoto chování.

  • BindingGroup Vytvoří a přidá StackPanel kořen, když vytvoří uživatelské rozhraní aplikace.

  • Volání BeginEdit, CommitEdita CancelEdit v logice aplikace umožňující vrácení změn zpět.

  • Zavolá TryGetValue metodu 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í (UI) aplikace. Kořen StackPanel obsahuje BindingGroup text, který ValidationRule ověří položku, jak je popsáno výše. Objekty vazeb na Price vlastnosti a OfferExpires vlastnost se stanou součástí BindingGroup a každá vazba má jistotu ValidationRule , že cena a datum jsou platné hodnoty. Ověřovací pravidla pro jednotlivé vlastnosti se spouští před na ValidationRule straně 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 spuštění každého ValidationRule , který je přidružený k sadě BindingGroup. Pokud bude každý z nich ValidationRule úspěšný, CommitEdit uloží hodnoty do objektu a ukončí transakci úprav. Pokud CommitEdit je aplikace úspěšná, zahájí další transakci úprav. ValidationRule Pokud dojde k chybě, dojde k události, Validation.Error protože aplikace nastavená NotifyOnValidationError na BindingGroup true hodnotu (v předchozím příkladu). ItemErrorValidation.Error zpracuje událost a zobrazí informace o chybě ověření uživateli. Příklad také zpracovává Loaded událost pro StackPanel událost a Click událost pro tlačítko Storno .


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í ValidationRule ValidateDateAndPrice, který byl přidán do prvního příkladu BindingGroup . Pomocí ValidationRule BindingGroup metody Validate získá hodnoty, které uživatel zadal do formuláře, a zkontroluje, že pokud je položka více než 100 dolarů, bude k dispozici alespoň 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

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

Vlastnost nastavíte BindingGroup na FrameworkElement nebo FrameworkContentElement. Podřízené prvky dědí BindingGroup z nadřazených prvků stejně jako všechny ostatní zděděné vlastnosti. Vazba na sestupný prvek se přidá do BindingGroup některé z následujících situací:

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

ValidationRule Přidáte objekty do objektu BindingGroup. Při BindingGroup spuštění se předá jako první parametr Validate metody ValidationRule . K získání navrhovaných hodnot objektu můžete použít TryGetValue metodu nebo GetValue(Object, String) BindingGroup metodu Items a vlastnost získat zdroje vazeb.

Aktualizuje BindingGroup zdroje vazby současně místo každé vazby, které se aktualizují samostatně. Když zavoláte jednu z metod k ověření dat (ValidateWithoutUpdateUpdateSourcesnebo CommitEdit), vazba pro každý TextBox z příkladů se ověří a potenciálně aktualizuje. Pokud je vazba součástí BindingGroupvazby , zdroj vazby se neaktualizuje, dokud nezavoláte UpdateSources nebo CommitEdit na něm BindingGroup, pokud vlastnost explicitně nenastavíte UpdateSourceTrigger .

Konstruktory

BindingGroup()

Inicializuje novou instanci BindingGroup třídy.

Vlastnosti

BindingExpressions

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

CanRestoreValues

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

DependencyObjectType

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

(Zděděno od DependencyObject)
Dispatcher

Získá to DispatcherObject je přidruženoDispatcher.

(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 vazby objekty v .BindingGroup

Name

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

NotifyOnValidationError

Získá nebo nastaví, zda dojde k Error události při stavu ValidationRule změny.

Owner

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

SharesProposedValues

Získá nebo nastaví hodnotu, která označuje, zda opakované BindingGroup použití cílových hodnot, 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 být neplatné.

ValidationRules

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

Metody

BeginEdit()

Zahájí transakci úprav na zdrojích v sadě 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. To se provádí vyvoláním jakékoli CoerceValueCallback funkce zadané v metadatech vlastností pro vlastnost závislosti, protože existuje ve volání DependencyObject.

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

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

Equals(Object)

Určuje, zda je poskytnutá DependencyObject hodnota ekvivalentní 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í, které vlastnosti závislostí mají místně nastavené hodnoty na tomto DependencyObject.

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

Type Získá aktuální 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í 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ří použádnou kopii aktuálního souboru Object.

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

Vyvolá se při každé aktualizaci efektivní hodnoty jakékoli vlastnosti závislosti na této DependencyObject vlastnosti. Specifická vlastnost závislostí, 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 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 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ávislostí.

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

VerifyAccess()

Vynucuje, aby volající vlákno má k tomuto DispatcherObjectpřístupu přístup .

(Zděděno od DispatcherObject)

Platí pro