BindingGroup Classe

Définition

Contient une collection de liaisons et d'objets ValidationRule 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 article, ainsi que la date à laquelle l’offre expire. L’application affiche les informations actuelles pour l’élément sous le formulaire. L’utilisateur peut soumettre ou annuler les modifications.

L’application effectue les opérations suivantes pour obtenir ce comportement.

  • Crée un BindingGroup et l’ajoute à la racine StackPanel lorsqu’il crée l’interface utilisateur de l’application.

  • Appelle BeginEdit , CommitEdit et CancelEdit dans la logique de l’application pour permettre l’annulation des modifications.

  • Appelle TryGetValue dans 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 (IU) de l’application. La racine StackPanel a un BindingGroup qui contient un ValidationRule 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é deviennent partie intégrante de BindingGroup et chaque liaison a un ValidationRule pour s’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 ValidationRule sur le BindingGroup .

<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 de l’application. Quand l’utilisateur clique sur le bouton envoyer, l’application appelle CommitEdit pour exécuter chaque ValidationRule associé à BindingGroup . Si chacun ValidationRule d’eux aboutit, CommitEdit enregistre les valeurs dans l’objet et met fin à la transaction de modification. Si CommitEdit réussit, l’application commence une autre transaction de modification. Lorsqu’un ValidationRule échoue, l' Validation.Error événement se produit parce que l’application a la valeur NotifyOnValidationError true sur BindingGroup (dans l’exemple précédent). ItemError gère l' Validation.Error événement et affiche des informations sur l’erreur de validation à l’utilisateur. L’exemple gère également l' Loaded événement pour le StackPanel et l' Click événement pour le bouton Annuler .


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 le personnalisé ValidationRule ValidateDateAndPrice , qui a été ajouté au BindingGroup dans le premier exemple. ValidationRuleUtilise BindingGroup dans sa Validate méthode pour obtenir les valeurs entrées par l’utilisateur 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

BindingGroupCré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 type Address , qui a les propriétés,, Street , City ZipCode et Country , avec les valeurs fournies par l’utilisateur. L’application possède un panneau qui contient quatre TextBox contrôles, chacun étant lié aux données de l’une des propriétés de l’objet. Vous pouvez utiliser un ValidationRule dans un BindingGroup pour valider l' Address objet. Si les liaisons participent au même BindingGroup , vous pouvez vous assurer que le code postal est valide pour le pays ou la région de l’adresse.

Vous définissez la BindingGroup propriété sur FrameworkElement ou FrameworkContentElement . Les éléments enfants héritent BindingGroup de de leurs éléments parents, comme avec n’importe quelle autre propriété pouvant être héritée. Une liaison sur un élément descendant est ajoutée à un BindingGroup si l’une des situations suivantes se produit :

Dans l’exemple de l’adresse, supposez que le DataContext du Panel est défini sur l’objet de type Address . La liaison de chaque TextBox est ajoutée au BindingGroup du panneau.

Vous ajoutez des ValidationRule objets à un BindingGroup . BindingGroupEst passé comme premier paramètre de la Validate méthode lorsque ValidationRule s’exécute. Vous pouvez utiliser la TryGetValue GetValue(Object, String) méthode ou sur cette BindingGroup valeur pour récupérer les valeurs proposées de l’objet et la Items propriété pour récupérer les sources des liaisons.

BindingGroupMet à jour les sources de la liaison en même temps au lieu de mettre à jour chaque liaison séparément. Quand vous appelez l’une des méthodes pour valider les données ( ValidateWithoutUpdate , UpdateSources ou CommitEdit ), la liaison pour chaque TextBox dans l’exemple est validée et potentiellement mise à jour. Quand une liaison fait partie d’un BindingGroup , la source de la liaison n’est pas mise à jour tant que vous n’appelez pas UpdateSources ou CommitEdit sur le BindingGroup , sauf si vous définissez explicitement la UpdateSourceTrigger propriété.

Constructeurs

BindingGroup()

Initialise une nouvelle instance de la classe BindingGroup.

Propriétés

BindingExpressions

Obtient une collection d'objets BindingExpression qui contient des informations pour chaque liaison dans BindingGroup.

CanRestoreValues

Détermine si chaque source dans la liaison peut ignorer les modifications en attente et restaurer les valeurs d'origine.

DependencyObjectType

Obtient le DependencyObjectType qui encapsule le type CLR de cette instance.

(Hérité de DependencyObject)
Dispatcher

Obtient le Dispatcher associé à DispatcherObject.

(Hérité de DispatcherObject)
HasValidationError

Obtient une valeur qui indique si le BindingGroup a une règle de validation non réussie.

IsDirty

Obtient ou définit une valeur qui indique si le BindingGroup contient une valeur proposée qui n'a pas été écrite dans la source.

IsSealed

Récupère une valeur qui indique si cette instance est actuellement sealed (en lecture seule).

(Hérité de DependencyObject)
Items

Obtient les sources utilisées par les objets de liaison dans BindingGroup.

Name

Obtient ou définit le nom qui identifie le BindingGroup, qui peut être utilisé pour inclure et exclure des objets de liaison dans BindingGroup.

NotifyOnValidationError

Obtient ou définit si l'événement Error se produit lorsque l'état de ValidationRule change.

Owner

Obtient l'objet auquel ce BindingGroup est assigné.

SharesProposedValues

Obtient ou définit une valeur qui indique si le BindingGroup réutilise des valeurs cible qui n'ont pas été validées à la source.

ValidatesOnNotifyDataError

Obtient ou définit une valeur qui indique s'il faut inclure NotifyDataErrorValidationRule.

ValidationErrors

Obtient une collection d'objets d'ValidationError qui ont rendu le BindingGroup non valide.

ValidationRules

Obtient une collection d'objets ValidationRule qui valident les objets sources dans BindingGroup.

Méthodes

BeginEdit()

Commence une transaction de modification sur les sources dans 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 DispatcherObject.

(Hérité de DispatcherObject)
ClearValue(DependencyProperty)

Efface la valeur locale d’une propriété. La propriété à effacer est spécifiée par un identificateur DependencyProperty.

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

(Hérité de DependencyObject)
CoerceValue(DependencyProperty)

Convertit la valeur de la propriété de dépendance spécifiée. Pour cela, on appelle toute fonction CoerceValueCallback spécifiée dans les métadonnées de propriété pour la propriété de dépendance telle qu’elle existe sur le DependencyObject appelant.

(Hérité de DependencyObject)
CommitEdit()

Exécute tous les objets ValidationRule et met à jour les sources de liaison si toutes les règles de validation réussissent.

Equals(Object)

Détermine si un DependencyObject fourni est équivalent au DependencyObject réel.

(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 le 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)

Réévalue la valeur effective de la propriété de dépendance spécifiée.

(Hérité de DependencyObject)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Méthode appelée chaque fois que la valeur effective d’une propriété de dépendance sur ce 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, si elle existe.

(Hérité de DependencyObject)
SetCurrentValue(DependencyProperty, Object)

Définit la valeur d’une propriété de dépendance sans modifier sa valeur source.

(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 objets ValidationRule qui ont la propriété ValidationStep définie à RawProposedValue, ConvertedProposedValue ou UpdatedValue et 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 objets ValidationRule qui ont la propriété ValidationStep définie à RawProposedValue ou ConvertedProposedValue.

VerifyAccess()

Garantit que le thread appelant a accès à DispatcherObject.

(Hérité de DispatcherObject)

S’applique à