Compartilhar via


BindingGroup Classe

Definição

Contém uma coleção de associaçõ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 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. O aplicativo exibe as informações atuais do item abaixo do formulário. O usuário pode enviar ou cancelar as alterações.

O aplicativo faz o seguinte para obter esse comportamento.

  • Cria e BindingGroup adiciona a raiz StackPanel quando cria a interface do usuário do aplicativo.

  • Chamadas BeginEditeCommitEditCancelEdit, na lógica do aplicativo, para habilitar alterações reversivas.

  • Chama TryGetValue um Validate método para obter a entrada do usuário e, em seguida, verifique se um item acima de 100 dólares está disponível por pelo menos sete dias.

O exemplo a seguir cria a interface do usuário do aplicativo. A raiz StackPanel tem um BindingGroup que contém um ValidationRule que valida o item, conforme descrito anteriormente. Os objetos de associação na Price propriedade e na OfferExpires propriedade tornam-se parte da BindingGroup associação e cada associação tem um ValidationRule para garantir que o preço e a data, respectivamente, sejam valores válidos. As regras de validação para as propriedades individuais são executadas antes do ValidationRuleBindingGroup.

<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 do aplicativo. Quando o usuário clica no botão Enviar, o aplicativo chama CommitEdit para executar cada ValidationRule um associado ao BindingGroup. Se cada um ValidationRule tiver êxito, CommitEdit salvará os valores no objeto e encerrará a transação de edição. Se CommitEdit for bem-sucedido, o aplicativo iniciará outra transação de edição. Quando um ValidationRule falha, o Validation.Error evento ocorre porque o aplicativo definido NotifyOnValidationErrortrue como no BindingGroup (no exemplo anterior). ItemError manipula o Validation.Error evento e exibe informações sobre o erro de validação para o usuário. O exemplo também manipula o Loaded evento para o StackPanel evento e o Click evento para o 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 a seguir mostra o personalizado ValidationRuleValidateDateAndPrice, que foi adicionado ao BindingGroup primeiro exemplo. O ValidationRule usa o BindingGroup método em seu Validate método para obter os valores que o usuário inseriu no formulário e verifica se um item tem mais de 100 dólares, ele ficará 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

Comentários

Cria BindingGroup uma relação entre várias associações, que podem ser validadas e atualizadas juntas. Por exemplo, suponha que um aplicativo solicite que o usuário insira um endereço. Em seguida, o aplicativo preenche um objeto de tipoAddress, que tem as propriedades, Street, Citye ZipCodeCountry, com os valores fornecidos pelo usuário. O aplicativo tem um painel que contém quatro TextBox controles, cada um deles associado a uma das propriedades do objeto. Você pode usar um ValidationRule em um BindingGroup para validar o Address objeto. Se as associações participarem da mesma BindingGroup, você poderá garantir que o cep seja válido para o país/região do endereço.

Você define a BindingGroup propriedade em FrameworkElement ou FrameworkContentElement. Elementos filho herdam de BindingGroup seus elementos pai, assim como com qualquer outra propriedade herdável. Uma associação em um elemento descendente é adicionada a um BindingGroup caso ocorra uma das seguintes situações:

No exemplo do endereço, suponha que o DataContextPanel do é definido como o objeto do tipo Address. A associação para cada um TextBox é adicionada ao BindingGroup painel.

Você adiciona ValidationRule objetos a um BindingGroup. O BindingGroup é passado como o primeiro parâmetro do Validate método quando a execução ValidationRule . Você pode usar o método ou GetValue(Object, String) o TryGetValue método BindingGroup para obter os valores propostos do objeto e a Items propriedade para obter as fontes das associações.

Um BindingGroup atualiza as fontes da associação ao mesmo tempo em vez de cada associação ser atualizada separadamente. Quando você chama um dos métodos para validar os dados (ValidateWithoutUpdateou UpdateSourcesCommitEdit), a associação para cada TextBox um no exemplo é validada e potencialmente atualizada. Quando uma associação faz parte de um BindingGroup, a origem da associação não é atualizada até que você chame UpdateSources ou CommitEdit ative, BindingGroupa menos que você defina explicitamente a UpdateSourceTrigger propriedade.

Construtores

Nome Description
BindingGroup()

Inicializa uma nova instância da classe BindingGroup.

Propriedades

Nome Description
BindingExpressions

Obtém uma coleção de BindingExpression objetos que contém informações para cada Associação no BindingGroup.

CanRestoreValues

Obtém se cada fonte na associação pode descartar alterações pendentes e restaurar os valores originais.

DependencyObjectType

Obtém o DependencyObjectType que encapsula o tipo CLR dessa instância.

(Herdado de DependencyObject)
Dispatcher

Obtém o Dispatcher que DispatcherObject está associado.

(Herdado de DispatcherObject)
HasValidationError

Obtém um valor que indica se a BindingGroup regra de validação falhou.

IsDirty

Obtém ou define um valor que indica se ele BindingGroup contém um valor proposto que não foi gravado na origem.

IsSealed

Obtém um valor que indica se essa instância está lacrada no momento (somente leitura).

(Herdado de DependencyObject)
Items

Obtém as fontes usadas pelos objetos Binding no BindingGroup.

Name

Obtém ou define o nome que identifica o BindingGroup, que pode ser usado para incluir e excluir objetos binding no BindingGroup.

NotifyOnValidationError

Obtém ou define se o Error evento ocorre quando o estado de uma ValidationRule alteração.

Owner

Obtém o objeto ao qual isso BindingGroup é atribuído.

SharesProposedValues

Obtém ou define um valor que indica se os BindingGroup valores de destino reutilizam que não foram confirmados na origem.

ValidatesOnNotifyDataError

Obtém ou define um valor que indica se deve incluir o NotifyDataErrorValidationRule.

ValidationErrors

Obtém uma coleção de ValidationError objetos que causou a BindingGroup inválida.

ValidationRules

Obtém uma coleção de ValidationRule objetos que validam os objetos de origem BindingGroupno .

Métodos

Nome Description
BeginEdit()

Inicia uma transação de edição nas fontes no BindingGroup.

CancelEdit()

Encerra a transação de edição e descarta as alterações pendentes.

CheckAccess()

Determina se o thread de chamada tem acesso a isso DispatcherObject.

(Herdado de DispatcherObject)
ClearValue(DependencyProperty)

Limpa o valor local de uma propriedade. A propriedade a ser desmarcada é especificada por um DependencyProperty identificador.

(Herdado de DependencyObject)
ClearValue(DependencyPropertyKey)

Limpa o valor local de uma propriedade somente leitura. A propriedade a ser desmarcada é especificada por um DependencyPropertyKey.

(Herdado de DependencyObject)
CoerceValue(DependencyProperty)

Coagi o valor da propriedade de dependência especificada. Isso é feito invocando qualquer CoerceValueCallback função especificada nos metadados de propriedade para a propriedade de dependência como ela existe na chamada DependencyObject.

(Herdado de DependencyObject)
CommitEdit()

Executa todos os ValidationRule objetos e atualiza as fontes de associação se todas as regras de validação forem bem-sucedidas.

Equals(Object)

Determina se um fornecido DependencyObject é equivalente ao atual DependencyObject.

(Herdado de DependencyObject)
GetHashCode()

Obtém um código hash para isso DependencyObject.

(Herdado de DependencyObject)
GetLocalValueEnumerator()

Cria um enumerador especializado para determinar quais propriedades de dependência têm valores definidos localmente.DependencyObject

(Herdado de DependencyObject)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
GetValue(DependencyProperty)

Retorna o valor efetivo atual de uma propriedade de dependência nesta instância de um DependencyObject.

(Herdado de DependencyObject)
GetValue(Object, String)

Retorna 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 Objectatual.

(Herdado de Object)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Invocado sempre que o valor efetivo de qualquer propriedade de dependência tiver DependencyObject sido atualizado. A propriedade de dependência específica que foi alterada é relatada nos dados do evento.

(Herdado de DependencyObject)
ReadLocalValue(DependencyProperty)

Retorna o valor local de uma propriedade de dependência, se ela existir.

(Herdado de DependencyObject)
SetCurrentValue(DependencyProperty, Object)

Define o valor de uma propriedade de dependência sem alterar sua fonte de valor.

(Herdado de DependencyObject)
SetValue(DependencyProperty, Object)

Define o valor local de uma propriedade de dependência, especificada por seu identificador de propriedade de dependência.

(Herdado de DependencyObject)
SetValue(DependencyPropertyKey, Object)

Define o valor local de uma propriedade de dependência somente leitura, especificada pelo DependencyPropertyKey identificador da propriedade de dependência.

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

(Herdado de DependencyObject)
ToString()

Retorna uma cadeia de caracteres 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 associação e nos ValidationRule objetos que têm a ValidationStep propriedade definida como RawProposedValue, ConvertedProposedValueou UpdatedValue salva os valores dos destinos nos objetos de origem se todas as regras de validação forem bem-sucedidas.

ValidateWithoutUpdate()

Executa o conversor na associação e nos ValidationRule objetos que têm a ValidationStep propriedade definida como RawProposedValue ou ConvertedProposedValue.

VerifyAccess()

Impõe que o thread de chamada tenha acesso a isso DispatcherObject.

(Herdado de DispatcherObject)

Aplica-se a