Freigeben über


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

Die folgenden Beispiele erstellen eine Anwendung, die den Benutzer auffordert, die Beschreibung und den Preis eines Artikels und 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 die folgenden Schritte aus, um dieses Verhalten zu erzielen.

  • Erstellt eine BindingGroup und fügt es den Stamm StackPanel hinzu, wenn die Benutzeroberfläche der Anwendung erstellt wird.

  • Ruft BeginEdit, CommitEditund CancelEdit in der Logik der Anwendung auf, um das Rollback von Änderungen zu ermöglichen.

  • Ruft TryGetValue in einer Validate-Methode auf, um die Eingabe des Benutzers abzurufen, und überprüfen Sie dann, ob ein Element über 100 Dollar für mindestens sieben Tage verfügbar ist.

Im folgenden Beispiel wird die Benutzeroberfläche der Anwendung erstellt. Die Stamm-StackPanel verfügt über eine BindingGroup, die eine ValidationRule enthält, die das Element überprüft, wie zuvor beschrieben. Die Bindungsobjekte für die Price Eigenschaft und die OfferExpires Eigenschaft werden Teil des BindingGroup und jede Bindung hat eine ValidationRule, um sicherzustellen, dass Preis und Datum gültige Werte sind. Die Gültigkeitsprüfungsregeln für die einzelnen Eigenschaften werden vor dem ValidationRule für die 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 "Absenden" klickt, ruft die Anwendung CommitEdit auf, um jede ValidationRule auszuführen, die dem BindingGroupzugeordnet ist. Wenn jedes ValidationRule erfolgreich ist, speichert CommitEdit die Werte im Objekt und beendet die Bearbeitungstransaktion. Wenn CommitEdit erfolgreich ist, beginnt die Anwendung eine weitere Bearbeitungstransaktion. Wenn ein ValidationRule fehlschlägt, tritt das Validation.Error-Ereignis auf, da die Anwendung auf true für die BindingGroup festgelegt NotifyOnValidationError (im vorherigen Beispiel). ItemError behandelt das Validation.Error-Ereignis und zeigt dem Benutzer Informationen zum Überprüfungsfehler an. Das Beispiel behandelt auch das Loaded-Ereignis für die StackPanel und 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 dem BindingGroup im ersten Beispiel hinzugefügt wurde. Die ValidationRule verwendet die BindingGroup in der Validate-Methode, um die Werte abzurufen, die der Benutzer in das Formular eingegeben hat, und überprüft, ob ein Element über 100 Dollar beträgt, es mindestens sieben Tage lang verfügbar ist.

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 zusammen überprüft und aktualisiert werden können. Angenommen, eine Anwendung fordert den Benutzer auf, eine Adresse einzugeben. Die Anwendung füllt dann ein Objekt vom Typ Addressauf, das die Eigenschaften Street, City, ZipCodeund Countrymit den vom Benutzer bereitgestellten Werten enthält. Die Anwendung verfügt über ein Panel mit vier TextBox Steuerelementen, von denen jede 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 eigenschaft BindingGroup für FrameworkElement oder FrameworkContentElementfest. Untergeordnete Elemente erben die BindingGroup von ihren übergeordneten Elementen, genauso wie bei jeder anderen vererbbaren Eigenschaft. Eine Bindung für ein untergeordnetes Element wird einem BindingGroup hinzugefügt, wenn eine der folgenden Situationen auftritt:

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

Sie fügen ValidationRule Objekte zu einem BindingGrouphinzu. Die BindingGroup wird beim Ausführen der ValidationRule als erster Parameter der Validate-Methode übergeben. Sie können die TryGetValue- oder GetValue(Object, String)-Methode für dieses BindingGroup verwenden, um die vorgeschlagenen Werte des Objekts abzurufen, und die Items Eigenschaft, um die Quellen der Bindungen abzurufen.

Eine BindingGroup aktualisiert die Quellen der Bindung gleichzeitig, anstatt jede Bindung separat zu aktualisieren. Wenn Sie eine der Methoden zum Überprüfen der Daten (ValidateWithoutUpdate, UpdateSourcesoder CommitEdit) aufrufen, wird die Bindung für jede TextBox im Beispiel überprüft und potenziell aktualisiert. Wenn eine Bindung Teil einer BindingGroupist, wird die Quelle der Bindung erst aktualisiert, wenn Sie UpdateSources oder CommitEdit für die BindingGroupaufrufen, es sei denn, Sie legen die eigenschaft UpdateSourceTrigger explizit fest.

Konstruktoren

BindingGroup()

Initialisiert eine neue Instanz der BindingGroup Klasse.

Eigenschaften

BindingExpressions

Ruft eine Auflistung von BindingExpression -Objekten ab, die Informationen für jede Bindung in der BindingGroupenthält.

CanRestoreValues

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

DependencyObjectType

Ruft die DependencyObjectType ab, die den CLR-Typ dieser Instanz umschließt.

(Geerbt von DependencyObject)
Dispatcher

Ruft die Dispatcher dieser DispatcherObject zugeordnet ist.

(Geerbt von DispatcherObject)
HasValidationError

Ruft einen Wert ab, der angibt, ob die BindingGroup über eine fehlgeschlagene Gültigkeitsprüfungsregel verfügt.

IsDirty

Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob die BindingGroup einen vorgeschlagenen Wert enthält, der nicht in die Quelle geschrieben wurde.

IsSealed

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

(Geerbt von DependencyObject)
Items

Ruft die Quellen ab, die von den Binding -Objekten im BindingGroupverwendet werden.

Name

Dient zum Abrufen oder Festlegen des Namens, der die BindingGroupidentifiziert, die verwendet werden kann, um Binding -Objekte in die BindingGroupeinzuschließen und auszuschließen.

NotifyOnValidationError

Ruft ab oder legt fest, ob das Error-Ereignis auftritt, wenn sich der Zustand eines ValidationRule ändert.

Owner

Ruft das Objekt ab, dem diese BindingGroup zugewiesen ist.

SharesProposedValues

Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob die BindingGroup Zielwerte wiederverwendet, die nicht an die Quelle gebunden wurden.

ValidatesOnNotifyDataError

Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob die NotifyDataErrorValidationRuleeingeschlossen werden soll.

ValidationErrors

Ruft eine Auflistung von ValidationError Objekten ab, die dazu geführt haben, dass die BindingGroup ungültig ist.

ValidationRules

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

Methoden

BeginEdit()

Beginnt eine Bearbeitungstransaktion für die Quellen im BindingGroup.

CancelEdit()

Beendet die Bearbeitungstransaktion und verwirft die ausstehenden Änderungen.

CheckAccess()

Bestimmt, ob der aufrufende Thread Zugriff auf diese DispatcherObjecthat.

(Geerbt von DispatcherObject)
ClearValue(DependencyProperty)

Löscht den lokalen Wert einer Eigenschaft. Die zu löschende Eigenschaft wird durch einen DependencyProperty Bezeichner angegeben.

(Geerbt von DependencyObject)
ClearValue(DependencyPropertyKey)

Löscht den lokalen Wert einer schreibgeschützten Eigenschaft. Die zu löschende Eigenschaft wird durch eine DependencyPropertyKeyangegeben.

(Geerbt von DependencyObject)
CoerceValue(DependencyProperty)

Wandelt den Wert der angegebenen Abhängigkeitseigenschaft um. Dies wird erreicht, indem alle in Eigenschaftsmetadaten für die Abhängigkeitseigenschaft angegebenen CoerceValueCallback Funktion aufgerufen werden, wie sie für die aufrufende DependencyObjectvorhanden ist.

(Geerbt von DependencyObject)
CommitEdit()

Führt alle ValidationRule Objekte aus und aktualisiert die Bindungsquellen, wenn alle Überprüfungsregeln erfolgreich sind.

Equals(Object)

Bestimmt, ob eine angegebene DependencyObject dem aktuellen DependencyObjectentspricht.

(Geerbt von DependencyObject)
GetHashCode()

Ruft einen Hashcode für diese DependencyObjectab.

(Geerbt von DependencyObject)
GetLocalValueEnumerator()

Erstellt einen speziellen Enumerator zum Bestimmen, welche Abhängigkeitseigenschaften lokal für dieses DependencyObjectfestgelegt sind.

(Geerbt von DependencyObject)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
GetValue(DependencyProperty)

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

(Geerbt von DependencyObject)
GetValue(Object, String)

Gibt den vorgeschlagenen Wert für die angegebene Eigenschaft und das angegebene 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 der aktuellen Object.

(Geerbt von Object)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

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

(Geerbt von DependencyObject)
ReadLocalValue(DependencyProperty)

Gibt den lokalen Wert einer Abhängigkeitseigenschaft zurück, sofern vorhanden.

(Geerbt von DependencyObject)
SetCurrentValue(DependencyProperty, Object)

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

(Geerbt von DependencyObject)
SetValue(DependencyProperty, Object)

Legt den lokalen Wert einer Abhängigkeitseigenschaft fest, die durch den Bezeichner der Abhängigkeitseigenschaft angegeben wird.

(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 wird.

(Geerbt von DependencyObject)
ShouldSerializeProperty(DependencyProperty)

Gibt einen Wert zurück, der angibt, ob Serialisierungsprozesse den Wert für die bereitgestellte 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 angegebene Element abzurufen.

UpdateSources()

Führt den Konverter für die Bindung und die ValidationRule Objekte aus, für die die ValidationStep-Eigenschaft auf RawProposedValue, ConvertedProposedValueoder UpdatedValue festgelegt ist, und speichert die Werte der Ziele in den Quellobjekten, wenn alle Überprüfungsregeln erfolgreich sind.

ValidateWithoutUpdate()

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

VerifyAccess()

Erzwingt, dass der aufrufende Thread Zugriff auf diese DispatcherObjecthat.

(Geerbt von DispatcherObject)

Gilt für: