BindingGroup Classe

Definizione

Contiene un insieme di associazioni e di oggetti ValidationRule utilizzati per convalidare un oggetto.

public ref class BindingGroup : System::Windows::DependencyObject
public class BindingGroup : System.Windows.DependencyObject
type BindingGroup = class
    inherit DependencyObject
Public Class BindingGroup
Inherits DependencyObject
Ereditarietà

Esempio

Negli esempi seguenti viene creata un'applicazione che richiede all'utente di immettere la descrizione e il prezzo di un articolo e la data di scadenza dell'offerta. L'applicazione visualizza le informazioni correnti per l'elemento sotto il modulo. L'utente può inviare o annullare le modifiche.

Per ottenere questo comportamento, l'applicazione esegue le operazioni seguenti.

  • Crea un oggetto BindingGroup e lo aggiunge alla radice StackPanel quando crea l'interfaccia utente dell'applicazione.

  • Chiama BeginEdit, CommitEdite CancelEdit nella logica dell'applicazione per abilitare il rollback delle modifiche.

  • Chiama TryGetValue in un Validate metodo per ottenere l'input dell'utente e quindi verificare che un articolo superiore a 100 dollari sia disponibile per almeno sette giorni.

Nell'esempio seguente viene creata l'interfaccia utente dell'applicazione. La radice StackPanel contiene un BindingGroupValidationRule oggetto che convalida l'elemento, come descritto in precedenza. Gli oggetti di associazione nella Price proprietà e la OfferExpires proprietà diventano parte di BindingGroup e ogni associazione ha un ValidationRule per assicurarsi che il prezzo e la data, rispettivamente, siano valori validi. Le regole di convalida per le singole proprietà vengono eseguite prima ValidationRule di BindingGroupin .

<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>

Nell'esempio seguente vengono illustrati i gestori eventi per l'applicazione. Quando l'utente fa clic sul pulsante Invia, l'applicazione chiama CommitEdit per eseguire ogni ValidationRule oggetto associato BindingGroupa . Se ogni ValidationRule operazione riesce, CommitEdit salva i valori nell'oggetto e termina la transazione di modifica. In caso CommitEdit di esito positivo, l'applicazione avvia un'altra transazione di modifica. Quando un oggetto ValidationRule ha esito negativo, l'evento Validation.Error si verifica perché l'applicazione è impostata NotifyOnValidationError su true su BindingGroup (nell'esempio precedente). ItemError gestisce l'evento Validation.Error e visualizza informazioni sull'errore di convalida all'utente. L'esempio gestisce anche l'evento Loaded per StackPanel e l'evento Click per il pulsante Annulla .


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

Nell'esempio seguente viene illustrato l'oggetto personalizzato ValidationRuleValidateDateAndPrice, che è stato aggiunto a BindingGroup nel primo esempio. ValidationRule Usa il BindingGroup nel metodo Validate per ottenere i valori immessi dall'utente nel modulo e controlla che, se un elemento è superiore a 100 dollari, sarà disponibile per almeno sette giorni.

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

Commenti

Un BindingGroup oggetto crea una relazione tra più associazioni, che possono essere convalidate e aggiornate insieme. Si supponga, ad esempio, che un'applicazione richiede all'utente di immettere un indirizzo. L'applicazione popola quindi un oggetto di tipo Address, che ha le proprietà , Street, CityZipCode, e Country, con i valori forniti dall'utente. L'applicazione dispone di un pannello che contiene quattro TextBox controlli, ognuno dei quali è dati associati a una delle proprietà dell'oggetto. È possibile utilizzare un oggetto in per ValidationRuleBindingGroup convalidare l'oggetto Address . Se le associazioni fanno parte dello stesso BindingGroup, è possibile assicurarsi che il codice postale sia valido per il paese o l'area geografica dell'indirizzo.

Impostare la BindingGroup proprietà su FrameworkElement o FrameworkContentElement. Gli elementi figlio ereditano dall'elemento BindingGroup padre, come per qualsiasi altra proprietà ereditabile. Un'associazione su un elemento discendente viene aggiunta a un BindingGroup oggetto se si verifica una delle situazioni seguenti:

Nell'esempio dell'indirizzo si supponga che l'oggetto DataContext di Panel sia impostato sull'oggetto di tipo Address. L'associazione per ogni TextBox oggetto viene aggiunta al BindingGroup del pannello.

Si aggiungono ValidationRule oggetti a un oggetto BindingGroup. L'oggetto BindingGroup viene passato come primo parametro del Validate metodo quando viene ValidationRule eseguito. È possibile utilizzare il TryGetValue metodo o GetValue(Object, String) per BindingGroup ottenere i valori proposti dell'oggetto e la Items proprietà per ottenere le origini delle associazioni.

Aggiorna BindingGroup le origini dell'associazione contemporaneamente anziché ogni associazione da aggiornare separatamente. Quando si chiama uno dei metodi per convalidare i dati (ValidateWithoutUpdate, UpdateSourceso CommitEdit), l'associazione per ogni TextBox oggetto dell'esempio viene convalidata e potenzialmente aggiornata. Quando un'associazione fa parte di un BindingGroupoggetto , l'origine dell'associazione non viene aggiornata fino a quando non si chiama UpdateSources o CommitEdit su BindingGroup, a meno che non si imposti in modo esplicito la UpdateSourceTrigger proprietà .

Costruttori

BindingGroup()

Inizializza una nuova istanza della classe BindingGroup.

Proprietà

BindingExpressions

Ottiene un insieme di oggetti BindingExpression contenenti informazioni relative a ciascuna associazione nell’oggetto BindingGroup.

CanRestoreValues

Ottiene un valore che indica se ciascuna origine di associazione può annullare le modifiche in sospeso e ripristinare i valori originali.

DependencyObjectType

Ottiene l'oggetto DependencyObjectType che esegue il wrapping del tipo CLR di questa istanza.

(Ereditato da DependencyObject)
Dispatcher

Ottiene l'oggetto Dispatcher associato a DispatcherObject.

(Ereditato da DispatcherObject)
HasValidationError

Ottiene un valore che indica se BindingGroup include una regola di convalida con errori.

IsDirty

Ottiene o imposta un valore che indica se BindingGroup contiene un valore proposto che non è stato scritto nell'origine.

IsSealed

Ottiene un valore che indica se l'istanza è attualmente sealed (di sola lettura).

(Ereditato da DependencyObject)
Items

Ottiene le origini utilizzate dagli oggetti associazione nell’insieme BindingGroup.

Name

Ottiene o imposta il nome che identifica l’oggetto di tipo BindingGroup, utilizzabile per aggiungere o eliminare oggetti associazione nell’insieme BindingGroup.

NotifyOnValidationError

Ottiene o imposta un valore che indica se l’evento Error viene generato al modificarsi dello stato di un oggetto ValidationRule.

Owner

Ottiene l'oggetto a cui è assegnato questo oggetto BindingGroup.

SharesProposedValues

Ottiene o imposta un valore che indica se l'oggetto BindingGroup riutilizza i valori di destinazione di cui non è stato eseguito il commit nell'origine.

ValidatesOnNotifyDataError

Ottiene o imposta un valore che indica se includere NotifyDataErrorValidationRule.

ValidationErrors

Ottiene una raccolta di oggetti ValidationError che hanno reso non valido BindingGroup.

ValidationRules

Ottiene un insieme di oggetti ValidationRule per la convalida degli oggetti origine in un insieme di tipo BindingGroup.

Metodi

BeginEdit()

Avvia una transazione di modifica sugli oggetti origine di associazione nell’insieme BindingGroup.

CancelEdit()

Termina la transazione di modifica e annulla le modifiche in sospeso.

CheckAccess()

Determina se il thread chiamante ha accesso a DispatcherObject.

(Ereditato da DispatcherObject)
ClearValue(DependencyProperty)

Cancella il valore locale di una proprietà. La proprietà da cancellare è specificata da un identificatore DependencyProperty.

(Ereditato da DependencyObject)
ClearValue(DependencyPropertyKey)

Cancella il valore locale di una proprietà di sola lettura. La proprietà da cancellare è specificata da un oggetto DependencyPropertyKey.

(Ereditato da DependencyObject)
CoerceValue(DependencyProperty)

Assegna forzatamente il valore della proprietà di dipendenza specificata. Questa operazione viene eseguita richiamando qualsiasi funzione CoerceValueCallback specificata nei metadati della proprietà di dipendenza esistente nell'oggetto DependencyObject chiamante.

(Ereditato da DependencyObject)
CommitEdit()

Esegue tutti gli oggetti ValidationRule e aggiorna le origini di associazione, se tutte le regole di convalida sono state verificate con successo.

Equals(Object)

Determina se l'oggetto DependencyObject specificato equivale all'oggetto DependencyObject corrente.

(Ereditato da DependencyObject)
GetHashCode()

Ottiene un codice hash per l'oggetto DependencyObject.

(Ereditato da DependencyObject)
GetLocalValueEnumerator()

Crea un enumeratore specializzato per determinare le proprietà di dipendenza che presentano valori impostati localmente nell'oggetto DependencyObject.

(Ereditato da DependencyObject)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
GetValue(DependencyProperty)

Restituisce il valore effettivo corrente di una proprietà di dipendenza in questa istanza di DependencyObject.

(Ereditato da DependencyObject)
GetValue(Object, String)

Restituisce i valori proposti per la proprietà e l’elemento specificati.

InvalidateProperty(DependencyProperty)

Valuta di nuovo il valore effettivo della proprietà di dipendenza specificata.

(Ereditato da DependencyObject)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Richiamato ogni volta che viene aggiornato il valore effettivo di qualsiasi proprietà di dipendenza in DependencyObject. La proprietà di dipendenza specifica modificata viene indicata nei dati dell'evento.

(Ereditato da DependencyObject)
ReadLocalValue(DependencyProperty)

Restituisce il valore locale di una proprietà di dipendenza, se esistente.

(Ereditato da DependencyObject)
SetCurrentValue(DependencyProperty, Object)

Imposta il valore di una proprietà di dipendenza senza modificare l'origine del valore.

(Ereditato da DependencyObject)
SetValue(DependencyProperty, Object)

Imposta il valore locale di una proprietà di dipendenza, specificato dal relativo identificatore della proprietà di dipendenza.

(Ereditato da DependencyObject)
SetValue(DependencyPropertyKey, Object)

Imposta il valore locale di una proprietà di dipendenza di sola lettura, specificato dall'identificatore DependencyPropertyKey della proprietà di dipendenza.

(Ereditato da DependencyObject)
ShouldSerializeProperty(DependencyProperty)

Restituisce un valore che indica se i processi di serializzazione devono serializzare il valore della proprietà di dipendenza specificata.

(Ereditato da DependencyObject)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)
TryGetValue(Object, String, Object)

Tenta di ottenere i valori proposti per la proprietà e l’elemento specificati.

UpdateSources()

Esegue il convertitore sull’associazione e gli oggetti ValidationRule la cui proprietà ValidationStep è impostata su RawProposedValue, ConvertedProposedValue oppure UpdatedValue, quindi salva i valori degli oggetti destinazione sugli oggetti origine, se tutte le regole di convalida hanno avuto esito positivo.

ValidateWithoutUpdate()

Esegue il convertitore sull’associazione e gli oggetti ValidationRule la cui proprietà ValidationStep è impostata su RawProposedValue o ConvertedProposedValue.

VerifyAccess()

Impone che il thread chiamante abbia accesso a DispatcherObject.

(Ereditato da DispatcherObject)

Si applica a