ItemsControl.ItemBindingGroup Propriedade

Definição

Obtém ou define a BindingGroup que é copiada para cada item na ItemsControl.

C#
[System.ComponentModel.Bindable(true)]
public System.Windows.Data.BindingGroup ItemBindingGroup { get; set; }

Valor da propriedade

A BindingGroup que é copiada para cada item na ItemsControl.

Atributos

Exemplos

O exemplo a seguir faz parte de um aplicativo que solicita que o usuário insira vários clientes e atribua um representante de vendas a cada cliente e verifica se o representante de vendas e o cliente pertencem à mesma região. O exemplo define o ItemBindingGroupItemsControl de para que o ValidationRule, AreasMatch, valide cada item. O exemplo também cria um Label que exibe erros de validação. Observe que o Content do Label está associado a um ValidationError que ele obtém da Validation.ValidationAdornerSiteForProperty propriedade . O valor de é o contêiner de Validation.ValidationAdornerSiteForProperty item que tem o erro.

XAML
<ItemsControl Name="customerList"  ItemTemplate="{StaticResource ItemTemplate}"
              ItemsSource="{Binding}">
  <ItemsControl.ItemBindingGroup>
    <BindingGroup>
      <BindingGroup.ValidationRules>
        <src:AreasMatch/>
      </BindingGroup.ValidationRules>
    </BindingGroup>
  </ItemsControl.ItemBindingGroup>
  <ItemsControl.ItemContainerStyle>
    <Style TargetType="{x:Type ContentPresenter}">
      <Setter Property="Validation.ValidationAdornerSite"
              Value="{Binding ElementName=validationErrorReport}"/>
    </Style>
  </ItemsControl.ItemContainerStyle>
</ItemsControl>
XAML
<Label Name="validationErrorReport" 
       Content="{Binding RelativeSource={RelativeSource Self}, 
       Path=(Validation.ValidationAdornerSiteFor).(Validation.Errors)[0].ErrorContent}"
       Margin="5" Foreground="Red" HorizontalAlignment="Center"/>

O exemplo a seguir obtém o contêiner de item e chama UpdateSources no contêiner BindingGroup para validar os dados. Você deve validar os dados chamando um método no contêiner do BindingGroupitem, não no ItemBindingGroup do ItemsControl.

C#
void saveCustomer_Click(object sender, RoutedEventArgs e)
{
    Button btn = sender as Button;
    FrameworkElement container = (FrameworkElement) customerList.ContainerFromElement(btn);

    // If the user is trying to change an items, when another item has an error,
    // display a message and cancel the currently edited item.
    if (bindingGroupInError != null && bindingGroupInError != container.BindingGroup)
    {
        MessageBox.Show("Please correct the data in error before changing another customer");
        container.BindingGroup.CancelEdit();
        return;
    }

    if (container.BindingGroup.UpdateSources())
    {
        bindingGroupInError = null;
        MessageBox.Show("Item Saved");
    }
    else
    {
        bindingGroupInError = container.BindingGroup;
    }
}

Comentários

Quando você define a ItemBindingGroup propriedade , cada contêiner de item obtém um BindingGroup que tem os mesmos ValidationRule objetos que o ItemBindingGroup, mas as propriedades que descrevem os dados nas associações, como Items e BindingExpressions, são específicas para os dados de cada item no ItemsControl. Você deve acessar o contêiner do BindingGroup item para executar operações como validar os dados e marcar para erros em um item.

Aplica-se a

Produto Versões
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10