BindingGroup Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Contiene una raccolta di associazioni e ValidationRule oggetti 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.
L'applicazione esegue le operazioni seguenti per ottenere questo comportamento.
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 dispone di un ValidationRule oggetto per assicurarsi che i valori di prezzo e data, rispettivamente, siano valori validi. Le regole di convalida per le singole proprietà vengono eseguite prima di ValidationRuleBindingGroupin .
<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 a BindingGroup. Se ogni ValidationRule operazione riesce, CommitEdit salva i valori nell'oggetto e termina la transazione di modifica. Se CommitEdit ha esito positivo, l'applicazione avvia un'altra transazione di modifica.
ValidationRule In caso di errore, l'evento Validation.Error si verifica perché l'applicazione è impostata true su NotifyOnValidationError su BindingGroup (nell'esempio precedente).
ItemError gestisce l'evento Validation.Error e visualizza informazioni sull'errore di convalida per l'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 L'oggetto utilizza nel BindingGroupValidate metodo per ottenere i valori immessi dall'utente nel modulo e verifica 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 chiede 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 ha un pannello che contiene quattro TextBox controlli, ognuno dei quali è dati associati a una delle proprietà dell'oggetto. È possibile utilizzare un oggetto ValidationRule in per BindingGroup convalidare l'oggetto Address . Se le associazioni partecipano alla stessa BindingGroupclasse , è 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, esattamente come con qualsiasi altra proprietà ereditabile. Un'associazione su un elemento discendente viene aggiunta a un BindingGroup oggetto se si verifica una delle situazioni seguenti:
L'origine dell'associazione e l'oggetto DataContext dell'elemento con BindingGroup sono lo stesso oggetto e la BindingGroupName proprietà non è impostata.
La BindingGroupName proprietà dell'associazione è uguale a Name di BindingGroup e non è impostata in modo esplicito su
null.
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.
Un BindingGroup oggetto aggiorna 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 ognuno TextBox nell'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
| Nome | Descrizione |
|---|---|
| BindingGroup() |
Inizializza una nuova istanza della classe BindingGroup. |
Proprietà
| Nome | Descrizione |
|---|---|
| BindingExpressions |
Ottiene una raccolta di BindingExpression oggetti che contiene informazioni per ogni binding nell'oggetto BindingGroup. |
| CanRestoreValues |
Ottiene un valore che indica se ogni origine nell'associazione può eliminare 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 DispatcherDispatcherObject a cui è associato. (Ereditato da DispatcherObject) |
| HasValidationError |
Ottiene un valore che indica se ha BindingGroup una regola di convalida non riuscita. |
| IsDirty |
Ottiene o imposta un valore che indica se contiene BindingGroup un valore proposto che non è stato scritto nell'origine. |
| IsSealed |
Ottiene un valore che indica se questa istanza è attualmente sealed (sola lettura). (Ereditato da DependencyObject) |
| Items |
Ottiene le origini utilizzate dagli oggetti Binding in BindingGroup. |
| Name |
Ottiene o imposta il nome che identifica l'oggetto BindingGroup, che può essere utilizzato per includere ed escludere oggetti Binding in BindingGroup. |
| NotifyOnValidationError |
Ottiene o imposta un valore che indica se l'evento Error si verifica quando lo stato di un oggetto ValidationRule cambia. |
| Owner |
Ottiene l'oggetto a cui BindingGroup l'oggetto è assegnato. |
| SharesProposedValues |
Ottiene o imposta un valore che indica se l'oggetto riutilizza i valori di destinazione di cui non è stato eseguito il BindingGroup commit nell'origine. |
| ValidatesOnNotifyDataError |
Ottiene o imposta un valore che indica se includere .NotifyDataErrorValidationRule |
| ValidationErrors |
Ottiene una raccolta di ValidationError oggetti che hanno causato l'errore BindingGroup non valido. |
| ValidationRules |
Ottiene una raccolta di ValidationRule oggetti che convalidano gli oggetti di origine in BindingGroup. |
Metodi
| Nome | Descrizione |
|---|---|
| BeginEdit() |
Avvia una transazione di modifica sulle origini in BindingGroup. |
| CancelEdit() |
Termina la transazione di modifica e rimuove le modifiche in sospeso. |
| CheckAccess() |
Determina se il thread chiamante ha accesso a questo DispatcherObjectoggetto . (Ereditato da DispatcherObject) |
| ClearValue(DependencyProperty) |
Cancella il valore locale di una proprietà. La proprietà da cancellare viene specificata da un DependencyProperty identificatore. (Ereditato da DependencyObject) |
| ClearValue(DependencyPropertyKey) |
Cancella il valore locale di una proprietà di sola lettura. La proprietà da cancellare viene specificata da un oggetto DependencyPropertyKey. (Ereditato da DependencyObject) |
| CoerceValue(DependencyProperty) |
Forza il valore della proprietà di dipendenza specificata. A tale scopo, richiamare qualsiasi CoerceValueCallback funzione specificata nei metadati della proprietà per la proprietà di dipendenza così come esiste nella chiamata DependencyObjectdi . (Ereditato da DependencyObject) |
| CommitEdit() |
Esegue tutti gli ValidationRule oggetti e aggiorna le origini di associazione se tutte le regole di convalida hanno esito positivo. |
| Equals(Object) |
Determina se un oggetto specificato DependencyObject è equivalente all'oggetto corrente DependencyObject. (Ereditato da DependencyObject) |
| GetHashCode() |
Ottiene un codice hash per l'oggetto DependencyObject. (Ereditato da DependencyObject) |
| GetLocalValueEnumerator() |
Crea un enumeratore specializzato per determinare quali proprietà di dipendenza hanno valori impostati localmente in questo DependencyObjectoggetto . (Ereditato da DependencyObject) |
| GetType() |
Ottiene il Type dell'istanza corrente. (Ereditato da Object) |
| GetValue(DependencyProperty) |
Restituisce il valore effettivo corrente di una proprietà di dipendenza in questa istanza di un oggetto DependencyObject. (Ereditato da DependencyObject) |
| GetValue(Object, String) |
Restituisce il valore proposto per la proprietà e l'elemento specificati. |
| InvalidateProperty(DependencyProperty) |
Rivaluta il valore effettivo per la proprietà di dipendenza specificata. (Ereditato da DependencyObject) |
| MemberwiseClone() |
Crea una copia superficiale del Objectcorrente. (Ereditato da Object) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Richiamato ogni volta che il valore effettivo di qualsiasi proprietà di dipendenza in questo DependencyObject oggetto è stato aggiornato. La proprietà di dipendenza specifica modificata viene segnalata 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 modificarne l'origine del valore. (Ereditato da DependencyObject) |
| SetValue(DependencyProperty, Object) |
Imposta il valore locale di una proprietà di dipendenza, specificato dall'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 per la 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 il valore proposto per la proprietà e l'elemento specificati. |
| UpdateSources() |
Esegue il convertitore sull'associazione e sugli ValidationRule oggetti con la ValidationStep proprietà impostata su RawProposedValue, ConvertedProposedValueo UpdatedValue e salva i valori delle destinazioni negli oggetti di origine se tutte le regole di convalida hanno esito positivo. |
| ValidateWithoutUpdate() |
Esegue il convertitore sull'associazione e gli ValidationRule oggetti con la ValidationStep proprietà impostata su RawProposedValue o ConvertedProposedValue. |
| VerifyAccess() |
Impone che il thread chiamante abbia accesso a questo DispatcherObjectoggetto . (Ereditato da DispatcherObject) |