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 ein Und BindingGroup fügt es den Stamm StackPanel hinzu, wenn er die Benutzeroberfläche der Anwendung erstellt.

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

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

Im folgenden Beispiel wird die Benutzeroberfläche der Anwendung erstellt. Der Stamm StackPanel verfügt über ein BindingGroupValidationRule Element, das das Element überprüft, wie zuvor beschrieben. Die Bindungsobjekte für die Price Eigenschaft und die OfferExpires Eigenschaft werden Teil der 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 der Ausführung auf der ValidationRuleBindingGroup.

<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 CommitEdit die Anwendung auf, um jede ValidationRule auszuführen, die der BindingGroupSchaltfläche zugeordnet ist. Wenn die ValidationRule Einzelnen erfolgreich sind, CommitEdit werden die Werte im Objekt gespeichert und die Bearbeitungstransaktion beendet. Wenn CommitEdit die Anwendung erfolgreich ist, beginnt die Anwendung eine weitere Bearbeitungstransaktion. Wenn ein ValidationRule Fehler auftritt, tritt das Validation.Error Ereignis auf, da die Anwendung auf das BindingGroup (im vorherigen Beispiel) festgelegt NotifyOnValidationErrortrue ist. ItemError behandelt das Validation.Error Ereignis und zeigt Dem Benutzer Informationen zum Überprüfungsfehler an. Im Beispiel wird auch das Loaded Ereignis für das StackPanel Ereignis und das Click Ereignis für die Schaltfläche "Abbrechen " behandelt.


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 den Benutzerdefinierten ValidationRuleValidateDateAndPrice, der BindingGroup im ersten Beispiel hinzugefügt wurde. Die ValidationRule methode verwendet die BindingGroup in Validate der Methode, um die Werte abzurufen, die der Benutzer in das Formular eingegeben hat, und überprüft, ob ein Element über 100 Dollar liegt, es für mindestens sieben Tage 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

Eine 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 Address, das die Eigenschaften, Street, , City, ZipCodeund , mit Countryden Werten enthält, die der Benutzer bereitgestellt hat. 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 Objekt in einer ValidationRuleBindingGroup Datei verwenden, um das Address Objekt zu überprüfen. Wenn sich die Bindungen am gleichen BindingGroupBindungen beteiligen, können Sie sicherstellen, dass die Postleitzahl für das Land/die Region der Adresse gültig ist.

Sie legen die BindingGroup Eigenschaft auf FrameworkElement oder FrameworkContentElement. Untergeordnete Elemente erben die BindingGroup von ihren übergeordneten Elementen, genauso wie bei jeder anderen vererbbaren Eigenschaft. Einer der folgenden Situationen wird eine Bindung für ein untergeordnetes Element hinzugefügt BindingGroup :

Gehen Sie im Beispiel der Adresse davon aus, dass das DataContextPanel Objekt des Typs Addressfestgelegt ist. Die Bindung für jede TextBox wird dem BindingGroup Panel hinzugefügt.

Sie fügen einem Objekt Objekte hinzu ValidationRuleBindingGroup. Der BindingGroup Parameter wird beim Ausführen als erster Parameter der Validate Methode ValidationRule übergeben. Sie können dazu die TryGetValue vorgeschlagenen Werte des Objekts und GetValue(Object, String)BindingGroup die Items Eigenschaft verwenden, um die Quellen der Bindungen abzurufen.

Eine BindingGroup Aktualisierung der Quellen der Bindung gleichzeitig, anstatt jede Bindung separat zu aktualisieren. Wenn Sie eine der Methoden zum Überprüfen der Daten (ValidateWithoutUpdate, oder CommitEdit) aufrufen, UpdateSourceswird die Bindung für jedes TextBox Beispiel überprüft und potenziell aktualisiert. Wenn eine Bindung Teil einer BindingGroupBindung ist, wird die Quelle der Bindung erst aktualisiert, wenn Sie UpdateSources die Eigenschaft explizit festlegenUpdateSourceTrigger.CommitEditBindingGroup

Konstruktoren

Name Beschreibung
BindingGroup()

Initialisiert eine neue Instanz der BindingGroup-Klasse.

Eigenschaften

Name Beschreibung
BindingExpressions

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

CanRestoreValues

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

DependencyObjectType

Ruft den DependencyObjectType CLR-Typ dieser Instanz ab.

(Geerbt von DependencyObject)
Dispatcher

Ruft dies Dispatcher ab, dem dies DispatcherObject zugeordnet ist.

(Geerbt von DispatcherObject)
HasValidationError

Ruft einen Wert ab, der angibt, ob die BindingGroup Gültigkeitsprüfungsregel fehlgeschlagen ist.

IsDirty

Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob der BindingGroup vorgeschlagene 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 in der BindingGroup.

Name

Dient zum Abrufen oder Festlegen des Namens, der den BindingGroup, der zum Einschließen und Ausschließen von Binding -Objekten in der BindingGroup.

NotifyOnValidationError

Ruft ab oder legt fest, ob das Error Ereignis auftritt, wenn sich der Status einer ValidationRule Änderung ändert.

Owner

Ruft das Objekt ab, dem dies BindingGroup zugewiesen ist.

SharesProposedValues

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

ValidatesOnNotifyDataError

Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob die NotifyDataErrorValidationRule.

ValidationErrors

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

ValidationRules

Ruft eine Auflistung von ValidationRule Objekten ab, die die Quellobjekte in der BindingGroup.

Methoden

Name Beschreibung
BeginEdit()

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

CancelEdit()

Beendet die Bearbeitungstransaktion und verwirft die ausstehenden Änderungen.

CheckAccess()

Bestimmt, ob der aufrufende Thread Zugriff auf diesen DispatcherObjectThread hat.

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

(Geerbt von DependencyObject)
CoerceValue(DependencyProperty)

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

(Geerbt von DependencyObject)
CommitEdit()

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

Equals(Object)

Bestimmt, ob ein bereitgestelltes DependencyObject Element dem aktuellen DependencyObjectentspricht.

(Geerbt von DependencyObject)
GetHashCode()

Ruft einen Hashcode für diese DependencyObjectab.

(Geerbt von DependencyObject)
GetLocalValueEnumerator()

Erstellt einen speziellen Enumerator, um zu bestimmen, welche Abhängigkeitseigenschaften lokal festgelegte Werte für diese DependencyObjectEigenschaft haben.

(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 einer .DependencyObject

(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 Eigenschaft 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, auf die die ValidationStep Eigenschaft festgelegt ist RawProposedValue, ConvertedProposedValueoder UpdatedValue 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, auf die die ValidationStep Eigenschaft festgelegt RawProposedValue ist, oder ConvertedProposedValue.

VerifyAccess()

Erzwingt, dass der aufrufende Thread Zugriff auf diesen DispatcherObjectThread hat.

(Geerbt von DispatcherObject)

Gilt für: