ItemsControl.ItemBindingGroup Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene o establece el BindingGroup que se copia en cada elemento en el ItemsControl.
public:
property System::Windows::Data::BindingGroup ^ ItemBindingGroup { System::Windows::Data::BindingGroup ^ get(); void set(System::Windows::Data::BindingGroup ^ value); };
[System.ComponentModel.Bindable(true)]
public System.Windows.Data.BindingGroup ItemBindingGroup { get; set; }
[<System.ComponentModel.Bindable(true)>]
member this.ItemBindingGroup : System.Windows.Data.BindingGroup with get, set
Public Property ItemBindingGroup As BindingGroup
Valor de propiedad
BindingGroup que se copia en cada elemento en el ItemsControl.
- Atributos
Ejemplos
El ejemplo siguiente forma parte de una aplicación que solicita al usuario que escriba varios clientes y asigne un representante de ventas a cada cliente y, a continuación, compruebe que el representante de ventas y el cliente pertenecen a la misma región. En el ejemplo se establece el ItemBindingGroup de ItemsControl para que ValidationRule, AreasMatch
, validará cada elemento. En el ejemplo también se crea un Label objeto que muestra los errores de validación. Observe que el Content de Label está enlazado a un ValidationError objeto que obtiene de la Validation.ValidationAdornerSiteForProperty propiedad . El valor de Validation.ValidationAdornerSiteForProperty es el contenedor de elementos que tiene el error.
<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>
<Label Name="validationErrorReport"
Content="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.ValidationAdornerSiteFor).(Validation.Errors)[0].ErrorContent}"
Margin="5" Foreground="Red" HorizontalAlignment="Center"/>
En el ejemplo siguiente se obtiene el contenedor de elementos y se llama UpdateSources a en el contenedor BindingGroup para validar los datos. Debe validar los datos llamando a un método en el contenedor de BindingGroupelementos , no en el ItemBindingGroup de ItemsControl.
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;
}
}
Private Sub saveCustomer_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim btn As Button = TryCast(sender, Button)
Dim container As FrameworkElement = CType(customerList.ContainerFromElement(btn), FrameworkElement)
' 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 IsNot Nothing AndAlso bindingGroupInError IsNot container.BindingGroup Then
MessageBox.Show("Please correct the data in error before changing another customer")
container.BindingGroup.CancelEdit()
Return
End If
If container.BindingGroup.UpdateSources() Then
bindingGroupInError = Nothing
MessageBox.Show("Item Saved")
Else
bindingGroupInError = container.BindingGroup
End If
End Sub
Comentarios
Al establecer la ItemBindingGroup propiedad , cada contenedor de elementos obtiene un BindingGroup objeto que tiene los mismos ValidationRule objetos que , ItemBindingGrouppero las propiedades que describen los datos de los enlaces, como Items y BindingExpressions, son específicos de los datos de cada elemento de ItemsControl. Debe tener acceso al contenedor de BindingGroup elementos para realizar operaciones como validar los datos y comprobar si hay errores en un elemento.