BindingGroup Classe

Definição

Contém uma coleção de associações e ValidationRule objetos que são usados para validar um objeto.Contains a collection of bindings and ValidationRule objects that are used to validate an object.

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 a seguir criam um aplicativo que solicita que o usuário insira a descrição e o preço de um item e a data em que a oferta expira.The following examples create an application that prompts the user to enter the description and price of an item and the date that the offer expires. O aplicativo exibe as informações atuais para o item abaixo do formulário.The application displays the current information for the item below the form. O usuário pode enviar ou cancelar as alterações.The user can submit or cancel the changes.

O aplicativo faz o seguinte para alcançar esse comportamento.The application does the following to achieve this behavior.

  • Cria um BindingGroup e adiciona-o à StackPanel raiz quando ele cria UI (interface do usuário)user interface (UI) o do aplicativo.Creates a BindingGroup and adds it the root StackPanel when it creates the UI (interface do usuário)user interface (UI) of the application.

  • Chama BeginEdit, CommitEdit eCancelEdit na lógica do aplicativo para habilitar a reversão de alterações.Calls BeginEdit, CommitEdit, and CancelEdit in the application's logic to enable rolling back changes.

  • Chamadas TryGetValue em um Validate método para obter a entrada do usuário e, em seguida, verificar se um item acima de 100 dólares está disponível por pelo menos sete dias.Calls TryGetValue in a Validate method to get the user's input and then check that an item over 100 dollars is available for at least seven days.

O exemplo a seguir cria UI (interface do usuário)user interface (UI) o do aplicativo.The following example creates the UI (interface do usuário)user interface (UI) of the application. A raiz StackPanel tem um BindingGroup que contém um ValidationRule que valida o item, conforme descrito anteriormente.The root StackPanel has a BindingGroup that contains a ValidationRule that validates the item, as described previously. Os objetos de associação na Price Propriedade e a OfferExpires BindingGroup Propriedade tornam-se parte do e cada associação tem ValidationRule um para garantir que o preço e a data, respectivamente, sejam valores válidos.The binding objects on the Price property and the OfferExpires property become part of the BindingGroup and each binding has a ValidationRule to make sure that price and date, respectively, are valid values. As regras de validação para as propriedades individuais são executadas ValidationRule antes do BindingGroupno.The validation rules for the individual properties run before the ValidationRule on the 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 a seguir mostra os manipuladores de eventos para o aplicativo.The following example shows the event handlers for the application. Quando o usuário clica no botão enviar, o aplicativo chama CommitEdit para executar cada ValidationRule um associado BindingGroupao.When the user clicks the Submit button, the application calls CommitEdit to run each ValidationRule that is associated with the BindingGroup. Se cada ValidationRule um for bem CommitEdit sucedido, o salvará os valores no objeto e terminará a transação de edição.If each ValidationRule succeeds, CommitEdit saves the values to the object and ends the edit transaction. Se CommitEdit for bem-sucedido, o aplicativo iniciará outra transação de edição.If CommitEdit is successful, the application begins another edit transaction. Quando uma ValidationRule falha, o Validation.Error evento ocorre porque o BindingGroup aplicativo está NotifyOnValidationError definido true como no (no exemplo anterior).When a ValidationRule fails, the Validation.Error event occurs because the application set NotifyOnValidationError to true on the BindingGroup (in the previous example). ItemErrormanipula o Validation.Error evento e exibe informações sobre o erro de validação para o usuário.ItemError handles the Validation.Error event and displays information about the validation error to the user. O exemplo também manipula o Loaded evento para o StackPanel e o Click evento para o botão Cancelar .The example also handles the Loaded event for the StackPanel and the Click event for the Cancel button.


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 a seguir mostra o ValidationRule personalizado ValidateDateAndPrice, BindingGroup que foi adicionado ao no primeiro exemplo.The following example shows the custom ValidationRule ValidateDateAndPrice, which was added to the BindingGroup in the first example. O ValidationRule usa o BindingGroup em seu Validate método para obter os valores inseridos pelo usuário no formulário e verifica se um item tem mais de 100 dólares, ele estará disponível por pelo menos sete dias.The ValidationRule uses the BindingGroup in its Validate method to get the values the user entered into the form, and checks that if an item is over 100 dollars, it will be available for at least seven days.

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

Comentários

Um BindingGroup cria uma relação entre várias associações, que podem ser validadas e atualizadas juntas.A BindingGroup creates a relationship between multiple bindings, which can be validated and updated together. Por exemplo, suponha que um aplicativo solicite que o usuário insira um endereço.For example, suppose that an application prompts the user to enter an address. Em seguida, o aplicativo popula um objeto do Addresstipo, que tem as propriedades Street City, ZipCode,, e Country, com os valores fornecidos pelo usuário.The application then populates an object of type Address, which has the properties, Street, City, ZipCode, and Country, with the values that the user provided. O aplicativo tem um painel que contém quatro TextBox controles, cada um dos quais os dados são associados a uma das propriedades do objeto.The application has a panel that contains four TextBox controls, each of which is data bound to one of the object's properties. Você pode usar um ValidationRule em um BindingGroup para validar o Address objeto.You can use a ValidationRule in a BindingGroup to validate the Address object. Se as associações participarem do mesmo BindingGroup, você poderá garantir que o CEP seja válido para o país/região do endereço.If the bindings participate in the same BindingGroup, you can ensure that the zip-code is valid for the country/region of the address.

Você define a BindingGroup Propriedade em FrameworkElement ou FrameworkContentElement.You set the BindingGroup property on FrameworkElement or FrameworkContentElement. Os elementos filho herdam os BindingGroup elementos pai, assim como ocorre com qualquer outra propriedade herdável.Child elements inherit the BindingGroup from their parent elements, just as with any other inheritable property. Uma associação em um elemento descendente será adicionada a um BindingGroup se uma das seguintes situações ocorrer:A binding on a descendent element is added to a BindingGroup if one of the following situations occurs:

No exemplo do endereço, suponha que o DataContext Panel de é definido como o objeto do tipo Address.In the example of the address, suppose that the DataContext of the Panel is set to the object of type Address. A associação para cada TextBox é adicionada BindingGroup ao do painel.The binding for each TextBox is added to the BindingGroup of the panel.

Você adiciona ValidationRule objetos a um BindingGroup.You add ValidationRule objects to a BindingGroup. O BindingGroup é passado como o primeiro parâmetro Validate do método quando o ValidationRule é executado.The BindingGroup is passed as the first parameter of the Validate method when the ValidationRule runs. Você pode usar o TryGetValue método GetValue(Object, String) BindingGroup ou para obter os valores propostos do objeto e a Items propriedade para obter as fontes das associações.You can use the TryGetValue or GetValue(Object, String) method on that BindingGroup to get the proposed values of the object, and the Items property to get the sources of the bindings.

Um BindingGroup atualiza as fontes da associação ao mesmo tempo em vez de cada associação que está sendo atualizada separadamente.A BindingGroup updates the sources of the binding at the same time instead of each binding being updated separately. Quando você chama um dos métodos para validar os dadosValidateWithoutUpdate(, UpdateSourcesou CommitEdit), a associação para cada TextBox um no exemplo é validada e potencialmente atualizada.When you call one of the methods to validate the data (ValidateWithoutUpdate, UpdateSources, or CommitEdit), the binding for each TextBox in the example is validated and potentially updated. Quando uma associação faz parte de um BindingGroup, a origem da associação não é atualizada até que você chame UpdateSources ou CommitEdit no BindingGroup, a menos que você defina explicitamente UpdateSourceTrigger a propriedade.When a binding is part of a BindingGroup, the source of the binding is not updated until you call UpdateSources or CommitEdit on the BindingGroup, unless you explicitly set the UpdateSourceTrigger property.

Construtores

BindingGroup()

Inicializa uma nova instância da classe BindingGroup.Initializes a new instance of the BindingGroup class.

Propriedades

BindingExpressions

Obtém uma coleção de objetos BindingExpression que contém informações sobre cada associação no BindingGroup.Gets a collection of BindingExpression objects that contains information for each Binding in the BindingGroup.

CanRestoreValues

Obtém se cada fonte na associação pode descartar as alterações pendentes e restaurar os valores originais.Gets whether each source in the binding can discard pending changes and restore the original values.

DependencyObjectType

Obtém o DependencyObjectType que encapsula o tipo CLRCLR dessa instância.Gets the DependencyObjectType that wraps the CLRCLR type of this instance.

(Herdado de DependencyObject)
Dispatcher

Obtém o Dispatcher ao qual este DispatcherObject está associado.Gets the Dispatcher this DispatcherObject is associated with.

(Herdado de DispatcherObject)
HasValidationError

Obtém um valor que indica se BindingGroup tem uma regra de validação com falha.Gets a value that indicates whether the BindingGroup has a failed validation rule.

IsDirty

Obtém ou define um valor que indica se BindingGroup contém um valor proposto que não foi gravado na origem.Gets or sets a value that indicates whether the BindingGroup contains a proposed value that has not been written to the source.

IsSealed

Obtém um valor que indica se essa instância está validada no momento (somente leitura).Gets a value that indicates whether this instance is currently sealed (read-only).

(Herdado de DependencyObject)
Items

Obtém as fontes usadas pelos objetos de associação no BindingGroup.Gets the sources that are used by the Binding objects in the BindingGroup.

Name

Obtém ou define o nome que identifica o BindingGroup, que pode ser usado para incluir e excluir objetos de associação no BindingGroup.Gets or sets the name that identifies the BindingGroup, which can be used to include and exclude Binding objects in the BindingGroup.

NotifyOnValidationError

Obtém ou define se o evento Error ocorre quando o estado de um ValidationRule é alterado.Gets or sets whether the Error event occurs when the state of a ValidationRule changes.

Owner

Obtém o objeto ao qual este BindingGroup é atribuído.Gets the object that this BindingGroup is assigned to.

SharesProposedValues

Obtém ou define um valor que indica se o BindingGroup reutiliza os valores de destino que não foram confirmados para a origem.Gets or sets a value that indicates whether the BindingGroup reuses target values that have not been committed to the source.

ValidatesOnNotifyDataError

Obtém ou define um valor que indica se a NotifyDataErrorValidationRule deve ser incluída.Gets or sets a value that indicates whether to include the NotifyDataErrorValidationRule.

ValidationErrors

Obtém uma coleção de objetos ValidationError que fizeram o BindingGroup ser inválido.Gets a collection of ValidationError objects that caused the BindingGroup to be invalid.

ValidationRules

Obtém uma coleção de objetos ValidationRule que validam os objetos de origem no BindingGroup.Gets a collection of ValidationRule objects that validate the source objects in the BindingGroup.

Métodos

BeginEdit()

Inicia uma transação de edição nas fontes no BindingGroup.Begins an edit transaction on the sources in the BindingGroup.

CancelEdit()

Termina a transação de edição e descarta as alterações pendentes.Ends the edit transaction and discards the pending changes.

CheckAccess()

Determina se o thread de chamada tem acesso a este DispatcherObject.Determines whether the calling thread has access to this DispatcherObject.

(Herdado de DispatcherObject)
ClearValue(DependencyProperty)

Limpa o valor local de uma propriedade.Clears the local value of a property. A propriedade a ser limpa é especificada por um identificador DependencyProperty.The property to be cleared is specified by a DependencyProperty identifier.

(Herdado de DependencyObject)
ClearValue(DependencyPropertyKey)

Limpa o valor local de uma propriedade somente leitura.Clears the local value of a read-only property. A propriedade a ser limpa é especificada por um DependencyPropertyKey.The property to be cleared is specified by a DependencyPropertyKey.

(Herdado de DependencyObject)
CoerceValue(DependencyProperty)

Converte o valor da propriedade de dependência especificada.Coerces the value of the specified dependency property. Isso é feito invocando qualquer função CoerceValueCallback especificada nos metadados de propriedade para a propriedade de dependência, visto que ela existe na chamada a DependencyObject.This is accomplished by invoking any CoerceValueCallback function specified in property metadata for the dependency property as it exists on the calling DependencyObject.

(Herdado de DependencyObject)
CommitEdit()

Executará todos os objetos ValidationRule e atualizará as fontes de associação, se todas as regras de validação tiverem sido bem-sucedidas.Runs all the ValidationRule objects and updates the binding sources if all validation rules succeed.

Equals(Object)

Determina se um DependencyObject fornecido é equivalente ao DependencyObject atual.Determines whether a provided DependencyObject is equivalent to the current DependencyObject.

(Herdado de DependencyObject)
GetHashCode()

Obtém o código hash para esse DependencyObject.Gets a hash code for this DependencyObject.

(Herdado de DependencyObject)
GetLocalValueEnumerator()

Cria um enumerador especializado para determinar quais propriedades de dependência têm valores definidos localmente nessa DependencyObject.Creates a specialized enumerator for determining which dependency properties have locally set values on this DependencyObject.

(Herdado de DependencyObject)
GetType()

Obtém o Type da instância atual.Gets the Type of the current instance.

(Herdado de Object)
GetValue(DependencyProperty)

Retorna o valor efetivo atual de uma propriedade de dependência nessa instância de um DependencyObject.Returns the current effective value of a dependency property on this instance of a DependencyObject.

(Herdado de DependencyObject)
GetValue(Object, String)

Retorna o valor proposto para o item e a propriedade especificados.Returns the proposed value for the specified property and item.

InvalidateProperty(DependencyProperty)

Reavalia o valor efetivo para a propriedade de dependência especificada.Re-evaluates the effective value for the specified dependency property.

(Herdado de DependencyObject)
MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Invocado sempre que o valor efetivo de qualquer propriedade de dependência nesse DependencyObject for atualizada.Invoked whenever the effective value of any dependency property on this DependencyObject has been updated. A propriedade de dependência específica que mudou é relatada os dados do evento.The specific dependency property that changed is reported in the event data.

(Herdado de DependencyObject)
ReadLocalValue(DependencyProperty)

Retorna o valor local de uma propriedade de dependência, local, se houver.Returns the local value of a dependency property, if it exists.

(Herdado de DependencyObject)
SetCurrentValue(DependencyProperty, Object)

Define o valor da propriedade de dependência sem alterar a origem do valor.Sets the value of a dependency property without changing its value source.

(Herdado de DependencyObject)
SetValue(DependencyProperty, Object)

Define o valor local de uma propriedade de dependência, especificada pelo identificador da propriedade de dependência.Sets the local value of a dependency property, specified by its dependency property identifier.

(Herdado de DependencyObject)
SetValue(DependencyPropertyKey, Object)

Define o valor de uma propriedade de dependência somente leitura, especificada pelo identificador DependencyPropertyKey da propriedade de dependência.Sets the local value of a read-only dependency property, specified by the DependencyPropertyKey identifier of the dependency property.

(Herdado de DependencyObject)
ShouldSerializeProperty(DependencyProperty)

Retorna um valor que indica se os processos de serialização devem serializar o valor da propriedade de dependência fornecida.Returns a value that indicates whether serialization processes should serialize the value for the provided dependency property.

(Herdado de DependencyObject)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.Returns a string that represents the current object.

(Herdado de Object)
TryGetValue(Object, String, Object)

Tenta obter o valor proposto para a propriedade e o item especificados.Attempts to get the proposed value for the specified property and item.

UpdateSources()

Executará o conversor na associação e nos objetos ValidationRule que têm a propriedade ValidationStep definida como RawProposedValue, ConvertedProposedValue ou UpdatedValue e salvará os valores dos destinos para os objetos de origem se todas as regras de validação tiverem sido bem-sucedidas.Runs the converter on the binding and the ValidationRule objects that have the ValidationStep property set to RawProposedValue, ConvertedProposedValue, or UpdatedValue and saves the values of the targets to the source objects if all the validation rules succeed.

ValidateWithoutUpdate()

Executa o conversor na associação e nos objetos ValidationRule que têm a propriedade ValidationStep definida como RawProposedValue ou ConvertedProposedValue.Runs the converter on the binding and the ValidationRule objects that have the ValidationStep property set to RawProposedValue or ConvertedProposedValue.

VerifyAccess()

Impõe que o thread de chamada tenha acesso a este DispatcherObject.Enforces that the calling thread has access to this DispatcherObject.

(Herdado de DispatcherObject)

Aplica-se a