BindingGroup Klasse

Definition

Enthält eine Auflistung von Bindungen und ValidationRule-Objekten, die zum Überprüfen eines Objekts verwendet werden.

public ref class BindingGroup : System::Windows::DependencyObject
public class BindingGroup : System.Windows.DependencyObject
type BindingGroup = class
    inherit DependencyObject
Public Class BindingGroup
Inherits DependencyObject
Vererbung

Beispiele

In den folgenden Beispielen wird eine Anwendung erstellt, die den Benutzer auffordert, die Beschreibung und den Preis eines Elements sowie das Datum einzugeben, an dem das Angebot abläuft. Die Anwendung zeigt die aktuellen Informationen für das Element unterhalb des Formulars an. Der Benutzer kann die Änderungen übermitteln oder abbrechen.

Die Anwendung führt folgendes aus, um dieses Verhalten zu erreichen.

  • Erstellt eine BindingGroup und fügt ihn dem Stamm hinzu StackPanel , wenn die Benutzeroberfläche (UI) der Anwendung erstellt wird.

  • Ruft BeginEdit, CommitEditund CancelEdit in der Logik der Anwendung auf, um rollback-Änderungen zu ermöglichen.

  • Ruft TryGetValue eine Validate -Methode auf, um die Eingaben des Benutzers abzurufen und dann zu überprüfen, ob ein Artikel über 100 Dollar für mindestens sieben Tage verfügbar ist.

Im folgenden Beispiel wird die Benutzeroberfläche (UI) der Anwendung erstellt. Der Stamm StackPanel verfügt über eine BindingGroup , die ein ValidationRule enthält, das das Element überprüft, wie zuvor beschrieben. Die Bindungsobjekte für die Price -Eigenschaft und die OfferExpires -Eigenschaft werden Teil von BindingGroup und jede Bindung hat einen ValidationRule , um sicherzustellen, dass Preis und Datum gültige Werte sind. Die Validierungsregeln für die einzelnen Eigenschaften werden vor dem auf ValidationRule dem BindingGroupausgeführt.

<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>

Das folgende Beispiel zeigt die Ereignishandler für die Anwendung. Wenn der Benutzer auf die Schaltfläche Senden klickt, ruft CommitEdit die Anwendung auf, um alle ValidationRule auszuführen, die dem BindingGroupzugeordnet sind. Wenn beide ValidationRule erfolgreich sind, CommitEdit werden die Werte im -Objekt gespeichert, und die Bearbeitungstransaktion wird beendet. Wenn CommitEdit erfolgreich ist, beginnt die Anwendung eine weitere Bearbeitungstransaktion. Wenn ein ValidationRule -Ereignis fehlschlägt, tritt das Validation.Error Ereignis auf, weil die Anwendung auf true auf BindingGroup festgelegt NotifyOnValidationError ist (im vorherigen Beispiel). ItemError behandelt das Validation.Error Ereignis und zeigt dem Benutzer Informationen zum Validierungsfehler an. Das Beispiel behandelt auch das Loaded Ereignis für und StackPanel das Click Ereignis für die Schaltfläche Abbrechen .


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

Das folgende Beispiel zeigt die benutzerdefinierte ValidationRuleValidateDateAndPrice, die der im ersten Beispiel hinzugefügt BindingGroup wurde. Der ValidationRule verwendet in seiner Validate -Methode, BindingGroup um die Werte abzurufen, die der Benutzer in das Formular eingegeben hat, und überprüft, ob ein Artikel mindestens sieben Tage lang verfügbar ist, wenn ein Element über 100 Dollar liegt.

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

Hinweise

Ein BindingGroup erstellt eine Beziehung zwischen mehreren Bindungen, die gemeinsam überprüft und aktualisiert werden kann. Angenommen, eine Anwendung fordert den Benutzer auf, eine Adresse einzugeben. Die Anwendung füllt dann ein Objekt vom Typ Addressauf, Streetdas über die Eigenschaften , City, ZipCodeund Countryverfügt, mit den Vom Benutzer bereitgestellten Werten. Die Anwendung verfügt über einen Bereich, der vier TextBox Steuerelemente enthält, von denen jedes Daten an eine der Eigenschaften des Objekts gebunden ist. Sie können ein ValidationRule in einem BindingGroup verwenden, um das Address Objekt zu überprüfen. Wenn die Bindungen an demselben BindingGroupteilnehmen, können Sie sicherstellen, dass die Postleitzahl für das Land/die Region der Adresse gültig ist.

Sie legen die BindingGroup -Eigenschaft für oder FrameworkContentElementfestFrameworkElement. Untergeordnete Elemente erben von BindingGroup ihren übergeordneten Elementen, genau wie bei jeder anderen vererbbaren Eigenschaft. Eine Bindung für ein untergeordnetes Element wird einer BindingGroup hinzugefügt, wenn eine der folgenden Situationen auftritt:

Nehmen Wir im Beispiel der Adresse an, dass der DataContext auf Panel das -Objekt vom Typ Addressfestgelegt ist. Die Bindung für jede TextBox wird dem BindingGroup des Bereichs hinzugefügt.

Sie fügen einem BindingGroup-Objekt Objekte hinzuValidationRule. Wird BindingGroup als erster Parameter der Validate -Methode übergeben, wenn die ValidationRule ausgeführt wird. Sie können die TryGetValue - oder GetValue(Object, String) -Methode verwenden, BindingGroup um die vorgeschlagenen Werte des -Objekts abzurufen, und die Items -Eigenschaft, um die Quellen der Bindungen abzurufen.

Ein BindingGroup aktualisiert die Quellen der Bindung gleichzeitig, anstatt dass jede Bindung separat aktualisiert wird. Wenn Sie eine der Methoden aufrufen, um die Daten (ValidateWithoutUpdate, oder CommitEdit) zu überprüfen, UpdateSourceswird die Bindung für jede TextBox der Methoden im Beispiel überprüft und möglicherweise aktualisiert. Wenn eine Bindung Teil eines BindingGroupist, wird die Quelle der Bindung erst aktualisiert, wenn Sie UpdateSources oder CommitEdit aufrufen BindingGroup, es sei denn, Sie legen die UpdateSourceTrigger -Eigenschaft explizit fest.

Konstruktoren

BindingGroup()

Initialisiert eine neue Instanz der BindingGroup-Klasse.

Eigenschaften

BindingExpressions

Ruft eine Auflistung von BindingExpression-Objekten mit Informationen für jede Bindung in der BindingGroup ab.

CanRestoreValues

Ruft ab, ob jede Quelle in der Bindung ausstehende Änderungen verwerfen und die ursprünglichen Werte wiederherstellen kann.

DependencyObjectType

Ruft den ab, der DependencyObjectType den CLR-Typ dieses instance umschließt.

(Geerbt von DependencyObject)
Dispatcher

Ruft den Dispatcher ab, der diesem DispatcherObject zugeordnet ist.

(Geerbt von DispatcherObject)
HasValidationError

Ruft einen Wert ab, der angibt, ob bei der Validierungsregel für die BindingGroup ein Fehler aufgetreten ist.

IsDirty

Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob BindingGroup einen vorgeschlagenen Wert enthält, der nicht in der Quelle geschrieben wurde.

IsSealed

Ruft einen Wert ab, der angibt, ob diese Instanz derzeit versiegelt (schreibgeschützt) ist.

(Geerbt von DependencyObject)
Items

Ruft die von den Bindungsobjekten in der BindingGroup verwendeten Quellen ab.

Name

Ruft den Namen ab, der die BindingGroup bezeichnet, die zum Einbeziehen und Ausschließen von Bindungsobjekten in der BindingGroup verwendet werden kann.

NotifyOnValidationError

Ruft ab oder legt fest, ob bei Änderungen am Zustand einer Error das ValidationRule-Ereignis eintritt.

Owner

Ruft das Objekt ab, dem dieses BindingGroup zugewiesen ist.

SharesProposedValues

Ruft einen Wert ab, der angibt, ob die BindingGroup-Klasse Zielwerte wiederverwendet, die nicht an die Quelle übertragen wurden, oder legt einen Wert fest.

ValidatesOnNotifyDataError

Ruft einen Wert ab, der angibt, ob die NotifyDataErrorValidationRule eingeschlossen werden soll, oder legt diesen fest.

ValidationErrors

Ruft eine Sammlung der ValidationError-Objekte ab, die dazu führten, dass BindingGroup ungültig war.

ValidationRules

Ruft eine Auflistung von ValidationRule-Objekten ab, die die Quellobjekte in der BindingGroup überprüfen.

Methoden

BeginEdit()

Startet eine Bearbeitungstransaktion für die Quellen in der BindingGroup.

CancelEdit()

Beendet die Bearbeitungstransaktion und verwirft die ausstehenden Änderungen.

CheckAccess()

Bestimmt, ob der aufrufende Thread auf dieses DispatcherObject zugreifen kann.

(Geerbt von DispatcherObject)
ClearValue(DependencyProperty)

Löscht den lokalen Wert einer Eigenschaft. Die Eigenschaft, deren Wert gelöscht werden soll, wird durch einen DependencyProperty-Bezeichner angegeben.

(Geerbt von DependencyObject)
ClearValue(DependencyPropertyKey)

Löscht den lokalen Wert einer schreibgeschützten Eigenschaft. Die Eigenschaft, deren Wert gelöscht werden soll, wird durch einen DependencyPropertyKey angegeben.

(Geerbt von DependencyObject)
CoerceValue(DependencyProperty)

Erzwingt den Wert der angegebenen Abhängigkeitseigenschaft. Dies erfolgt durch den Aufruf einer beliebigen CoerceValueCallback-Funktion, die in den Metadaten für die Abhängigkeitseigenschaft angegeben ist, während sie beim aufrufenden DependencyObject beendet wird.

(Geerbt von DependencyObject)
CommitEdit()

Führt alle ValidationRule-Objekte aus und aktualisiert die Bindungsquellen, wenn alle Validierungsregeln erfolgreich ausgeführt wurden.

Equals(Object)

Bestimmt, ob ein angegebenes DependencyObject dem aktuellen DependencyObject entspricht.

(Geerbt von DependencyObject)
GetHashCode()

Ruft einen Hashcode für diese DependencyObject ab.

(Geerbt von DependencyObject)
GetLocalValueEnumerator()

Erstellt einen spezialisierten Enumerator, mit dem bestimmt wird, welche Abhängigkeitseigenschaften dieses DependencyObject über lokal festgelegte Werte verfügen.

(Geerbt von DependencyObject)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
GetValue(DependencyProperty)

Gibt den aktuellen effektiven Wert einer Abhängigkeitseigenschaft für diese Instanz eines DependencyObject zurück.

(Geerbt von DependencyObject)
GetValue(Object, String)

Gibt den vorgeschlagenen Wert für die angegebene Eigenschaft und das Element zurück.

InvalidateProperty(DependencyProperty)

Wertet den effektiven Wert für die angegebene Abhängigkeitseigenschaft erneut aus.

(Geerbt von DependencyObject)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Wird immer dann aufgerufen, wenn der effektive Wert einer Abhängigkeitseigenschaft für dieses DependencyObject aktualisiert wurde. Welche spezifische Abhängigkeitseigenschaft geändert wird, wird in den Ereignisdaten gemeldet.

(Geerbt von DependencyObject)
ReadLocalValue(DependencyProperty)

Gibt den lokalen Wert einer Abhängigkeitseigenschaft zurück, wenn dieser vorhanden ist.

(Geerbt von DependencyObject)
SetCurrentValue(DependencyProperty, Object)

Legt den Wert einer Abhängigkeitseigenschaft fest, ohne deren Wertquelle zu ändern.

(Geerbt von DependencyObject)
SetValue(DependencyProperty, Object)

Legt den lokalen Wert einer Abhängigkeitseigenschaft fest, die durch ihren Bezeichner angegeben ist.

(Geerbt von DependencyObject)
SetValue(DependencyPropertyKey, Object)

Legt den lokalen Wert einer schreibgeschützten Abhängigkeitseigenschaft fest, die durch den DependencyPropertyKey-Bezeichner der Abhängigkeitseigenschaft angegeben ist.

(Geerbt von DependencyObject)
ShouldSerializeProperty(DependencyProperty)

Gibt einen Wert zurück, der angibt, ob Serialisierungsprozesse den Wert der bereitgestellten Abhängigkeitseigenschaft serialisieren sollen.

(Geerbt von DependencyObject)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)
TryGetValue(Object, String, Object)

Versucht, den vorgeschlagenen Wert für die angegebene Eigenschaft und das Element abzurufen.

UpdateSources()

Führt den Konverter für die Bindung und die ValidationRule-Objekte aus, deren ValidationStep-Eigenschaft auf RawProposedValue, ConvertedProposedValue oder UpdatedValue festgelegt ist, und speichert die Werte der Ziele in den Quellobjekten, sofern alle Validierungsregeln erfolgreich ausgeführt wurden.

ValidateWithoutUpdate()

Führt den Konverter für die Bindung und die ValidationRule-Objekte aus, deren ValidationStep-Eigenschaft auf RawProposedValue oder ConvertedProposedValue festgelegt ist.

VerifyAccess()

Erzwingt, dass der aufrufende Thread auf dieses DispatcherObject zugreifen kann.

(Geerbt von DispatcherObject)

Gilt für: