BindingGroup Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Contém uma coleção de ligações e ValidationRule objetos que são usados para validar um objeto.
public ref class BindingGroup : System::Windows::DependencyObject
public class BindingGroup : System.Windows.DependencyObject
type BindingGroup = class
inherit DependencyObject
Public Class BindingGroup
Inherits DependencyObject
- Herança
Exemplos
Os exemplos seguintes criam uma aplicação que pede ao utilizador que introduza a descrição e o preço de um artigo e a data de expiração da oferta. A aplicação apresenta a informação atual do item abaixo do formulário. O utilizador pode submeter ou cancelar as alterações.
A aplicação faz o seguinte para alcançar este comportamento.
Cria um BindingGroup e adiciona-o como raiz StackPanel quando cria a interface de utilizador (UI) da aplicação.
Chama BeginEdit, CommitEdit, e CancelEdit na lógica da aplicação para permitir reverter alterações.
Chama TryGetValue um Validate método para obter a opinião do utilizador e depois verifica se um item acima de 100 dólares está disponível durante pelo menos sete dias.
O exemplo seguinte cria a interface de utilizador (UI) da aplicação. A raiz StackPanel tem um BindingGroup que contém um ValidationRule que valida o item, como descrito anteriormente. Os objetos de ligação na Price propriedade e a OfferExpires propriedade tornam-se parte do BindingGroup e cada ligação tem um ValidationRule para garantir que preço e data, respetivamente, são valores válidos. As regras de validação para as propriedades individuais correm antes do ValidationRule em .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>
O exemplo seguinte mostra os gestores de eventos da aplicação. Quando o utilizador clica no botão Enviar, a aplicação chama CommitEdit para executar cada um ValidationRule que está associado ao BindingGroup. Se cada um ValidationRule tiver sucesso, CommitEdit os valores são guardados no objeto e termina a transação de edição. Se CommitEdit for bem-sucedida, a candidatura inicia outra transação de edição. Quando um ValidationRule falha, o Validation.Error evento ocorre porque a aplicação define NotifyOnValidationError para true em ( BindingGroup no exemplo anterior).
ItemError gere o Validation.Error evento e apresenta informações sobre o erro de validação ao utilizador. O exemplo também trata do Loaded evento para o StackPanel e do Click evento do botão Cancelar .
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
O exemplo seguinte mostra o costume ValidationRuleValidateDateAndPrice, que foi adicionado ao BindingGroup no primeiro exemplo. Utiliza ValidationRule o BindingGroup no seu Validate método para obter os valores inseridos pelo utilizador no formulário e verifica que, se um item for superior a 100 dólares, estará disponível por pelo menos sete dias.
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
Observações
A BindingGroup cria uma relação entre múltiplas ligações, que podem ser validadas e atualizadas em conjunto. Por exemplo, suponha que uma aplicação solicita ao utilizador que introduza um endereço. A aplicação preenche então um objeto do tipo Address, que tem as propriedades , StreetCity, ZipCode, e Country, com os valores fornecidos pelo utilizador. A aplicação tem um painel que contém quatro TextBox controlos, cada um dos quais está ligado a uma das propriedades do objeto. Podes usar um ValidationRule in a BindingGroup para validar o Address objeto. Se as ligações participarem da mesma BindingGroupforma, pode garantir que o código postal é válido para o país/região do endereço.
Define a BindingGroup propriedade em FrameworkElement ou FrameworkContentElement. Os elementos filhos herdam o BindingGroup dos seus elementos progenitores, tal como acontece com qualquer outra propriedade herdável. Uma ligação a um elemento descendente é adicionada a BindingGroup se ocorrer uma das seguintes situações:
A origem da ligação e a DataContext do elemento que tem o BindingGroup são o mesmo objeto e a BindingGroupName propriedade não está definida.
A BindingGroupName propriedade da ligação é igual à Name de e BindingGroup não são explicitamente definidos como
null.
No exemplo do endereço, suponha que o DataContext de é Panel atribuído ao objeto do tipo Address. A encadernação de cada TextBox um é adicionada ao BindingGroup do painel.
Adiciona-se ValidationRule objetos a um BindingGroup. O BindingGroup é passado como o primeiro parâmetro do Validate método quando o ValidationRule executa. Podes usar o TryGetValue método ou GetValue(Object, String) nisso BindingGroup para obter os valores propostos do objeto, e a Items propriedade para obter as fontes das ligações.
A BindingGroup atualiza as fontes da ligação ao mesmo tempo, em vez de cada ligação ser atualizada separadamente. Quando chama um dos métodos para validar os dados (ValidateWithoutUpdate, , ou CommitEdit), a ligação para cada TextBox um no exemplo é validada e UpdateSourcespotencialmente atualizada. Quando uma ligação faz parte de um BindingGroup, a origem da ligação não é atualizada até que chame UpdateSources ou CommitEdit no BindingGroup, a menos que defina explicitamente a UpdateSourceTrigger propriedade.
Construtores
| Name | Description |
|---|---|
| BindingGroup() |
Inicializa uma nova instância da BindingGroup classe. |
Propriedades
| Name | Description |
|---|---|
| BindingExpressions |
Obtém uma coleção de BindingExpression objetos que contém informação para cada Binding no BindingGroup. |
| CanRestoreValues |
Obtém se cada fonte na ligação pode descartar alterações pendentes e restaurar os valores originais. |
| DependencyObjectType |
Obtém o DependencyObjectType que envolve o tipo CLR desta instância. (Herdado de DependencyObject) |
| Dispatcher |
Percebe o Dispatcher que isto DispatcherObject está associado. (Herdado de DispatcherObject) |
| HasValidationError |
Obtém um valor que indica se tem BindingGroup uma regra de validação falhada. |
| IsDirty |
Obtém ou define um valor que indica se contém BindingGroup um valor proposto que não foi escrito na fonte. |
| IsSealed |
Recebe um valor que indica se esta instância está atualmente selada (apenas leitura). (Herdado de DependencyObject) |
| Items |
Obtém as fontes que são usadas pelos objetos Binding no BindingGroup. |
| Name |
Recebe ou define o nome que identifica o BindingGroup, que pode ser usado para incluir e excluir objetos de ligação no BindingGroup. |
| NotifyOnValidationError |
Obtém ou define se o Error evento ocorre quando o estado de um ValidationRule muda. |
| Owner |
Obtém o objeto a que isto BindingGroup está atribuído. |
| SharesProposedValues |
Recebe ou define um valor que indica se reutiliza BindingGroup valores-alvo que não foram comprometidos com a fonte. |
| ValidatesOnNotifyDataError |
Obtém ou define um valor que indica se deve incluir o NotifyDataErrorValidationRule. |
| ValidationErrors |
Obtém uma coleção de ValidationError objetos que causaram o BindingGroup inválido. |
| ValidationRules |
Obtém uma coleção de ValidationRule objetos que validam os objetos fonte no BindingGroup. |
Métodos
| Name | Description |
|---|---|
| BeginEdit() |
Inicia uma transação de edição nas fontes do BindingGrouparquivo . |
| CancelEdit() |
Termina a transação de edição e descarta as alterações pendentes. |
| CheckAccess() |
Determina se o thread que chama tem acesso a este DispatcherObject. (Herdado de DispatcherObject) |
| ClearValue(DependencyProperty) |
Limpa o valor local de uma propriedade. A propriedade a ser limpa é especificada por um DependencyProperty identificador. (Herdado de DependencyObject) |
| ClearValue(DependencyPropertyKey) |
Limpa o valor local de uma propriedade de apenas leitura. O imóvel a ser limpo é especificado por um DependencyPropertyKey. (Herdado de DependencyObject) |
| CoerceValue(DependencyProperty) |
Coage o valor da propriedade de dependência especificada. Isto é conseguido invocando qualquer CoerceValueCallback função especificada nos metadados da propriedade para a propriedade de dependência tal como existe na chamada DependencyObject. (Herdado de DependencyObject) |
| CommitEdit() |
Executa todos os ValidationRule objetos e atualiza as fontes de ligação se todas as regras de validação tiverem sucesso. |
| Equals(Object) |
Determina se um fornecido DependencyObject é equivalente à corrente DependencyObject. (Herdado de DependencyObject) |
| GetHashCode() |
Obtém um código de hash para isto DependencyObject. (Herdado de DependencyObject) |
| GetLocalValueEnumerator() |
Cria um enumerador especializado para determinar quais as propriedades de dependência que têm valores localmente definidos neste DependencyObject. (Herdado de DependencyObject) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| GetValue(DependencyProperty) |
Devolve o valor efetivo atual de uma propriedade de dependência nesta instância de um DependencyObject. (Herdado de DependencyObject) |
| GetValue(Object, String) |
Devolve o valor proposto para a propriedade e o item especificados. |
| InvalidateProperty(DependencyProperty) |
Reavalia o valor efetivo da propriedade de dependência especificada. (Herdado de DependencyObject) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Invocado sempre que o valor efetivo de qualquer propriedade de dependência disto DependencyObject for atualizado. A propriedade específica da dependência que mudou é reportada nos dados do evento. (Herdado de DependencyObject) |
| ReadLocalValue(DependencyProperty) |
Devolve o valor local de uma propriedade de dependência, se esta existir. (Herdado de DependencyObject) |
| SetCurrentValue(DependencyProperty, Object) |
Define o valor de uma propriedade de dependência sem alterar a sua fonte de valor. (Herdado de DependencyObject) |
| SetValue(DependencyProperty, Object) |
Define o valor local de uma propriedade de dependência, especificado pelo seu identificador de propriedade de dependência. (Herdado de DependencyObject) |
| SetValue(DependencyPropertyKey, Object) |
Define o valor local de uma propriedade de dependência somente de leitura, especificado pelo DependencyPropertyKey identificador da propriedade de dependência. (Herdado de DependencyObject) |
| ShouldSerializeProperty(DependencyProperty) |
Devolve um valor que indica se os processos de serialização devem serializar o valor da propriedade de dependência fornecida. (Herdado de DependencyObject) |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |
| TryGetValue(Object, String, Object) |
Tenta obter o valor proposto para a propriedade e o item especificados. |
| UpdateSources() |
Executa o conversor na ligação e nos ValidationRule objetos que têm ValidationStep a propriedade definida para RawProposedValue, ConvertedProposedValue, ou UpdatedValue e guarda os valores dos alvos nos objetos de origem se todas as regras de validação tiverem sucesso. |
| ValidateWithoutUpdate() |
Executa o conversor sobre a ligação e os ValidationRule objetos que têm a ValidationStep propriedade definida como RawProposedValue ou ConvertedProposedValue. |
| VerifyAccess() |
Faz cumprir que o thread que chama tem acesso a este DispatcherObject. (Herdado de DispatcherObject) |