BindingGroup Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Contient une collection de liaisons et ValidationRule d’objets utilisés pour valider un objet.
public ref class BindingGroup : System::Windows::DependencyObject
public class BindingGroup : System.Windows.DependencyObject
type BindingGroup = class
inherit DependencyObject
Public Class BindingGroup
Inherits DependencyObject
- Héritage
Exemples
Les exemples suivants créent une application qui invite l’utilisateur à entrer la description et le prix d’un élément et la date à laquelle l’offre expire. L’application affiche les informations actuelles de l’élément sous le formulaire. L’utilisateur peut envoyer ou annuler les modifications.
L’application effectue les opérations suivantes pour obtenir ce comportement.
Crée un BindingGroup élément et l’ajoute à la racine StackPanel lorsqu’il crée l’interface utilisateur de l’application.
Appelle BeginEdit, CommitEditet CancelEdit dans la logique de l’application pour activer la restauration des modifications.
Appelle TryGetValue une Validate méthode pour obtenir l’entrée de l’utilisateur, puis vérifier qu’un élément de plus de 100 dollars est disponible pendant au moins sept jours.
L’exemple suivant crée l’interface utilisateur de l’application. La racine StackPanel contient un BindingGroupValidationRule élément qui valide l’élément, comme décrit précédemment. Les objets de liaison sur la Price propriété et la OfferExpires propriété font partie de la BindingGroup liaison et chaque liaison a pour ValidationRule vous assurer que le prix et la date, respectivement, sont des valeurs valides. Les règles de validation pour les propriétés individuelles s’exécutent avant le 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>
L’exemple suivant montre les gestionnaires d’événements pour l’application. Lorsque l’utilisateur clique sur le bouton Envoyer, l’application appelle CommitEdit pour exécuter chaque ValidationRule élément associé au BindingGroup. Si chacune ValidationRule réussit, CommitEdit enregistre les valeurs dans l’objet et met fin à la transaction de modification. Si CommitEdit elle réussit, l’application commence une autre transaction de modification. En cas d’échecValidationRule, l’événement Validation.Error se produit parce que l’application est définie trueNotifyOnValidationError sur le BindingGroup (dans l’exemple précédent).
ItemError gère l’événement Validation.Error et affiche des informations sur l’erreur de validation à l’utilisateur. L’exemple gère également l’événement Loaded pour le StackPanel bouton Annuler et l’événementClick.
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
L’exemple suivant montre l’élément personnalisé ValidationRuleValidateDateAndPricequi a été ajouté au BindingGroup premier exemple. L’utilisation ValidationRule de BindingGroup la Validate méthode utilisée pour obtenir les valeurs que l’utilisateur a entrées dans le formulaire et vérifie que si un élément est supérieur à 100 dollars, il sera disponible pendant au moins sept jours.
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
Remarques
Une BindingGroup relation crée une relation entre plusieurs liaisons, qui peuvent être validées et mises à jour ensemble. Par exemple, supposons qu’une application invite l’utilisateur à entrer une adresse. L’application remplit ensuite un objet de typeAddress, qui a les propriétés, , StreetCity, ZipCodeet , avec Countryles valeurs fournies par l’utilisateur. L’application a un panneau qui contient quatre TextBox contrôles, dont chacune est liée aux données liées à l’une des propriétés de l’objet. Vous pouvez utiliser un ValidationRule dans un BindingGroup pour valider l’objet Address . Si les liaisons participent au même BindingGroupévénement, vous pouvez vous assurer que le code postal est valide pour le pays/région de l’adresse.
Vous définissez la BindingGroup propriété sur FrameworkElement ou FrameworkContentElement. Les éléments enfants héritent BindingGroup de leurs éléments parents, comme avec toute autre propriété héritable. Une liaison sur un élément décroissant est ajoutée à une BindingGroup si l’une des situations suivantes se produit :
La source de la liaison et DataContext l’élément qui possède le BindingGroup même objet et la BindingGroupName propriété n’est pas définie.
La BindingGroupName propriété de la liaison est égale à celle Name de la BindingGroup liaison et elle n’est pas définie explicitement sur
null.
Dans l’exemple de l’adresse, supposons que le DataContext du type Panel est défini sur l’objet de type Address. La liaison pour chaque TextBox élément est ajoutée au BindingGroup panneau.
Vous ajoutez des ValidationRule objets à un BindingGroup. Le BindingGroup paramètre est passé en tant que premier paramètre de la Validate méthode lors de l’exécution ValidationRule . Vous pouvez utiliser la ou GetValue(Object, String) la TryGetValue méthode pour BindingGroup obtenir les valeurs proposées de l’objet et la Items propriété pour obtenir les sources des liaisons.
Une BindingGroup mise à jour des sources de la liaison en même temps au lieu de chaque liaison mise à jour séparément. Lorsque vous appelez l’une des méthodes pour valider les données (ValidateWithoutUpdate, UpdateSourcesou CommitEdit), la liaison pour chaque TextBox élément de l’exemple est validée et potentiellement mise à jour. Lorsqu’une liaison fait partie d’une BindingGroupliaison, la source de la liaison n’est pas mise à jour tant que vous n’avez pas appelé UpdateSources ou CommitEdit activé la BindingGrouppropriété, sauf si vous définissez explicitement la UpdateSourceTrigger propriété.
Constructeurs
| Nom | Description |
|---|---|
| BindingGroup() |
Initialise une nouvelle instance de la classe BindingGroup. |
Propriétés
| Nom | Description |
|---|---|
| BindingExpressions |
Obtient une collection d’objets BindingExpression qui contient des informations pour chaque liaison dans le BindingGroup. |
| CanRestoreValues |
Obtient si chaque source de la liaison peut ignorer les modifications en attente et restaurer les valeurs d’origine. |
| DependencyObjectType |
Obtient le DependencyObjectType type CLR de cette instance. (Hérité de DependencyObject) |
| Dispatcher |
Obtient ce Dispatcher qui DispatcherObject est associé. (Hérité de DispatcherObject) |
| HasValidationError |
Obtient une valeur qui indique si la BindingGroup règle de validation a échoué. |
| IsDirty |
Obtient ou définit une valeur qui indique si la BindingGroup valeur contient une valeur proposée qui n’a pas été écrite dans la source. |
| IsSealed |
Obtient une valeur qui indique si cette instance est actuellement scellée (en lecture seule). (Hérité de DependencyObject) |
| Items |
Obtient les sources utilisées par les objets Binding dans le BindingGroup. |
| Name |
Obtient ou définit le nom qui identifie le BindingGroup, qui peut être utilisé pour inclure et exclure des objets Binding dans le BindingGroup. |
| NotifyOnValidationError |
Obtient ou définit si l’événement se produit lorsque l’état Error d’une ValidationRule modification. |
| Owner |
Obtient l’objet auquel cela BindingGroup est affecté. |
| SharesProposedValues |
Obtient ou définit une valeur qui indique si les BindingGroup valeurs cibles de réutilisation n’ont pas été validées dans la source. |
| ValidatesOnNotifyDataError |
Obtient ou définit une valeur qui indique s’il faut inclure le NotifyDataErrorValidationRule. |
| ValidationErrors |
Obtient une collection d’objets ValidationError qui ont provoqué l’invalidation BindingGroup . |
| ValidationRules |
Obtient une collection d’objets ValidationRule qui valident les objets sources dans le BindingGroup. |
Méthodes
| Nom | Description |
|---|---|
| BeginEdit() |
Commence une transaction de modification sur les sources dans le BindingGroup. |
| CancelEdit() |
Met fin à la transaction de modification et ignore les modifications en attente. |
| CheckAccess() |
Détermine si le thread appelant a accès à ce DispatcherObjectfichier . (Hérité de DispatcherObject) |
| ClearValue(DependencyProperty) |
Efface la valeur locale d’une propriété. La propriété à effacer est spécifiée par un DependencyProperty identificateur. (Hérité de DependencyObject) |
| ClearValue(DependencyPropertyKey) |
Efface la valeur locale d’une propriété en lecture seule. La propriété à effacer est spécifiée par un DependencyPropertyKey. (Hérité de DependencyObject) |
| CoerceValue(DependencyProperty) |
Force la valeur de la propriété de dépendance spécifiée. Pour ce faire, appelez n’importe quelle CoerceValueCallback fonction spécifiée dans les métadonnées de propriété pour la propriété de dépendance telle qu’elle existe sur l’appel DependencyObject. (Hérité de DependencyObject) |
| CommitEdit() |
Exécute tous les objets et met à jour les ValidationRule sources de liaison si toutes les règles de validation réussissent. |
| Equals(Object) |
Détermine si un élément fourni DependencyObject est équivalent à l’actuel DependencyObject. (Hérité de DependencyObject) |
| GetHashCode() |
Obtient un code de hachage pour ce DependencyObject. (Hérité de DependencyObject) |
| GetLocalValueEnumerator() |
Crée un énumérateur spécialisé pour déterminer quelles propriétés de dépendance ont des valeurs définies localement sur ce DependencyObject. (Hérité de DependencyObject) |
| GetType() |
Obtient la Type de l’instance actuelle. (Hérité de Object) |
| GetValue(DependencyProperty) |
Retourne la valeur effective actuelle d’une propriété de dépendance sur cette instance d’un DependencyObject. (Hérité de DependencyObject) |
| GetValue(Object, String) |
Retourne la valeur proposée pour la propriété et l’élément spécifiés. |
| InvalidateProperty(DependencyProperty) |
Évalue à nouveau la valeur effective de la propriété de dépendance spécifiée. (Hérité de DependencyObject) |
| MemberwiseClone() |
Crée une copie superficielle du Objectactuel. (Hérité de Object) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Appelé chaque fois que la valeur effective d’une propriété de dépendance sur celle-ci DependencyObject a été mise à jour. La propriété de dépendance spécifique qui a changé est signalée dans les données d’événement. (Hérité de DependencyObject) |
| ReadLocalValue(DependencyProperty) |
Retourne la valeur locale d’une propriété de dépendance, le cas échéant. (Hérité de DependencyObject) |
| SetCurrentValue(DependencyProperty, Object) |
Définit la valeur d’une propriété de dépendance sans modifier sa source de valeur. (Hérité de DependencyObject) |
| SetValue(DependencyProperty, Object) |
Définit la valeur locale d’une propriété de dépendance, spécifiée par son identificateur de propriété de dépendance. (Hérité de DependencyObject) |
| SetValue(DependencyPropertyKey, Object) |
Définit la valeur locale d’une propriété de dépendance en lecture seule, spécifiée par l’identificateur DependencyPropertyKey de la propriété de dépendance. (Hérité de DependencyObject) |
| ShouldSerializeProperty(DependencyProperty) |
Retourne une valeur qui indique si les processus de sérialisation doivent sérialiser la valeur de la propriété de dépendance fournie. (Hérité de DependencyObject) |
| ToString() |
Retourne une chaîne qui représente l’objet actuel. (Hérité de Object) |
| TryGetValue(Object, String, Object) |
Tente d’obtenir la valeur proposée pour la propriété et l’élément spécifiés. |
| UpdateSources() |
Exécute le convertisseur sur la liaison et les ValidationRule objets dont la ValidationStep propriété est définie RawProposedValuesur , ConvertedProposedValueou UpdatedValue enregistre les valeurs des cibles dans les objets sources si toutes les règles de validation réussissent. |
| ValidateWithoutUpdate() |
Exécute le convertisseur sur la liaison et les ValidationRule objets dont la propriété a la ValidationStep valeur RawProposedValue ou ConvertedProposedValue. |
| VerifyAccess() |
Applique que le thread appelant a accès à ce DispatcherObjectfichier . (Hérité de DispatcherObject) |