BindingGroup Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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 Address
auf, das die Eigenschaften Street
, City
, ZipCode
und Country
mit 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:
Die Quelle der Bindung und die DataContext des Elements mit dem BindingGroup sind dasselbe Objekt, und die BindingGroupName-Eigenschaft wird nicht festgelegt.
Die BindingGroupName Eigenschaft der Bindung entspricht dem Name der BindingGroup und sie werden nicht explizit auf
null
festgelegt.
Nehmen Sie im Beispiel der Adresse an, dass die DataContext des Panel auf das Objekt vom Typ Address
festgelegt 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) |