Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés
Esta documentación está archivada y no tiene mantenimiento.

BindingGroup (Clase)

Contiene una colección de enlaces y objetos ValidationRule que se usan para validar un objeto.

Espacio de nombres:  System.Windows.Data
Ensamblado:  PresentationFramework (en PresentationFramework.dll)
XMLNS para XAML: http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/netfx/2007/xaml/presentation

public class BindingGroup : DependencyObject

El tipo BindingGroup expone los siguientes miembros.

  NombreDescripción
Método públicoBindingGroupInicializa una nueva instancia de la clase BindingGroup.
Arriba

  NombreDescripción
Propiedad públicaBindingExpressionsObtiene una colección de objetos BindingExpression que contiene información para cada enlace del objeto BindingGroup.
Propiedad públicaCanRestoreValuesObtiene si cada origen del enlace puede descartar los cambios pendientes y restaurar los valores originales.
Propiedad públicaDependencyObjectTypeObtiene el objeto DependencyObjectType que ajusta el tipo CLR de esta instancia.  (Se hereda de DependencyObject).
Propiedad públicaDispatcherObtiene el objeto Dispatcher al que está asociado DispatcherObject. (Se hereda de DispatcherObject).
Propiedad públicaIsSealedObtiene un valor que indica si esta instancia está actualmente sellada (es de solo lectura). (Se hereda de DependencyObject).
Propiedad públicaItemsObtiene los orígenes que usan los objetos de enlace de BindingGroup.
Propiedad públicaNameObtiene o establece el nombre que identifica el objeto BindingGroup, que se puede usar para incluir y excluir los objetos de enlace de BindingGroup.
Propiedad públicaNotifyOnValidationErrorObtiene o establece si el evento Validation.Error se provoca cuando cambia el estado de ValidationRule.
Propiedad públicaSharesProposedValuesObtiene o establece un valor que indica si BindingGroup reutiliza los valores de destino que no se han confirmado en el origen.
Propiedad públicaValidationRulesObtiene una colección de objetos ValidationRule que validan los objetos de origen de BindingGroup.
Arriba

  NombreDescripción
Método públicoBeginEditComienza una transacción de edición en los orígenes del BindingGroup.
Método públicoCancelEditFinaliza la transacción de edición y descarta los cambios pendientes.
Método públicoCheckAccess Determina si el subproceso de la llamada tiene acceso a este DispatcherObject. (Se hereda de DispatcherObject).
Método públicoClearValue(DependencyProperty) Borra el valor local de una propiedad. La propiedad que se borrará se especifica mediante un identificador de DependencyProperty. (Se hereda de DependencyObject).
Método públicoClearValue(DependencyPropertyKey) Borra el valor local de una propiedad de sólo lectura. La propiedad que se borrará es especificada por DependencyPropertyKey. (Se hereda de DependencyObject).
Método públicoCoerceValue Fuerza el valor de propiedad de la dependencia especificada. Esto se logra a cualquier función de CoerceValueCallback especificada en los metadatos de propiedad para la propiedad de dependencia tal como existe en el objeto DependencyObject que llama. (Se hereda de DependencyObject).
Método públicoCommitEditEjecuta todos los objetos ValidationRule y actualiza los orígenes de enlace si todas las reglas de validación se ejecutan correctamente.
Método públicoEquals Determina si un DependencyObject proporcionado es equivalente a DependencyObject actual. (Se hereda de DependencyObject).
Método protegidoFinalize Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Se hereda de Object).
Método públicoGetHashCode Obtiene un código hash para este DependencyObject. (Se hereda de DependencyObject).
Método públicoGetLocalValueEnumeratorCrea un enumerador especializado para determinar qué propiedades de dependencia han establecido localmente los valores en DependencyObject. (Se hereda de DependencyObject).
Método públicoGetType Obtiene el Type de la instancia actual. (Se hereda de Object).
Método públicoGetValue(DependencyProperty) Devuelve el valor efectivo actual de propiedad de dependencia en esta instancia de DependencyObject. (Se hereda de DependencyObject).
Método públicoGetValue(Object, String) Devuelve el valor propuesto para la propiedad y el elemento especificados.
Método públicoInvalidatePropertyVuelve a evaluar el valor efectivo para la propiedad de dependencia especificada. (Se hereda de DependencyObject).
Método protegidoMemberwiseClone Crea una copia superficial del Object actual. (Se hereda de Object).
Método protegidoOnPropertyChanged Invocado siempre que el valor efectivo de cualquier propiedad de dependencia en este DependencyObject se haya actualizado. Se informa de la propiedad de dependencia concreta que cambió en los datos de evento. (Se hereda de DependencyObject).
Método públicoReadLocalValue Devuelve el valor local de propiedad de dependencia, si existe. (Se hereda de DependencyObject).
Método públicoSetCurrentValueEstablece el valor de una propiedad de dependencia sin cambiar el origen de su valor. (Se hereda de DependencyObject).
Método públicoSetValue(DependencyProperty, Object)Establece el valor local de una propiedad de dependencia, especificado por su identificador de propiedad de dependencia. (Se hereda de DependencyObject).
Método públicoSetValue(DependencyPropertyKey, Object)Establece el valor local de una propiedad de dependencia de sólo lectura, especificado por el identificador DependencyPropertyKey de la propiedad de dependencia. (Se hereda de DependencyObject).
Método protegidoShouldSerializePropertyDevuelve un valor que indica si los procesos de serialización deben serializar el valor de la propiedad de dependencia proporcionada. (Se hereda de DependencyObject).
Método públicoToString Devuelve una cadena que representa al objeto actual. (Se hereda de Object).
Método públicoTryGetValueIntenta obtener el valor propuesto para la propiedad y elemento especificados.
Método públicoUpdateSourcesEjecuta el convertidor en el enlace y los objetos ValidationRule que tienen la propiedad ValidationStep establecida en RawProposedValue, ConvertedProposedValue o UpdatedValue y guarda los valores de los destinos en los objetos de origen si todas las reglas de validación se ejecutan correctamente.
Método públicoValidateWithoutUpdateEjecuta el convertidor en el enlace y los objetos ValidationRule que tienen la propiedad ValidationStep establecida en RawProposedValue o ConvertedProposedValue.
Método públicoVerifyAccessExige que el subproceso de la llamada tenga acceso a DispatcherObject. (Se hereda de DispatcherObject).
Arriba

Un objeto BindingGroup crea una relación entre varios enlaces, que se pueden validar y actualizar juntos. Supongamos, por ejemplo, que una aplicación solicita al usuario que escriba una dirección. La aplicación a continuación rellena un objeto de tipo Address, que tiene las propiedades, Street, City, ZipCode, y Country, con los valores que el usuario ha proporcionado. La aplicación tiene un panel que contiene cuatro controles TextBox, cada uno de los cuales mantiene un enlace a datos con una de las propiedades del objeto. Puede utilizar ValidationRule en BindingGroup para validar el objeto Address . Si los enlaces participan en el mismo BindingGroup, puede asegurarse de que el código postal es válido para el país de la dirección.

Establezca la propiedad BindingGroup para FrameworkElement o FrameworkContentElement. Los elementos secundarios heredan BindingGroup de sus elementos primarios, al igual que ocurre con cualquier otra propiedad heredable. Un enlace en un elemento descendiente se agrega a BindingGroup si se da una de las siguientes situaciones:

En el ejemplo de dirección, suponga que la propiedad DataContext de Panel está establecido en el objeto del tipo Address. El enlace de cada TextBox se agrega al BindingGroup del panel.

Los objetos ValidationRule se agregan a un BindingGroup. BindingGroup se pasa como primer parámetro del método Validate cuando ValidationRule se ejecuta. Puede usar el método GetValue(Object, String) o TryGetValue en ese BindingGroup para obtener los valores propuestos del objeto, y la propiedad Items para obtener los orígenes de los enlaces.

Un BindingGroup actualiza los orígenes del enlace al mismo tiempo en lugar de hacerlo por separado. Al llamar a uno de los métodos para validar los datos (ValidateWithoutUpdate, UpdateSources o CommitEdit), se valida y potencialmente se actualiza el enlace de cada TextBox del ejemplo. Cuando un enlace forma parte de un BindingGroup, el origen del enlace no se actualiza hasta que se llama al método UpdateSources o CommitEdit en el BindingGroup, a menos que establezca explícitamente la propiedad UpdateSourceTrigger.

Los siguientes ejemplos crean una aplicación que solicita al usuario escribir la descripción y el precio de un elemento y la fecha en que expira la propuesta. La aplicación muestra la información actual sobre el artículo debajo del formulario. El usuario puede enviar o cancelar los cambios.

La aplicación realiza lo siguiente para lograr este comportamiento.

  • Crea BindingGroup y lo agrega a la raíz StackPanel cuando crea la interfaz de usuario (UI) de la aplicación.

  • Llama a BeginEdit, CommitEdit, y CancelEdit en la lógica de la aplicación para permitir deshacer cambios.

  • Llamadas TryGetValue en un método de Validate para obtener la entrada del usuario y a continuación comprobar que un elemento por encima 100 dólares esta disponible por lo menos siete días.

El ejemplo siguiente crea la interfaz de usuario (UI) de la aplicación. El control StackPanel raíz tiene un objeto BindingGroup que contiene una regla ValidationRule que valida el artículo, como se ha descrito previamente. Los objetos de enlace de la propiedad Price y la propiedad OfferExpires pasan a formar parte del objeto BindingGroup y cada enlace tiene una regla ValidationRule que garantiza que el precio y la fecha, respectivamente, son valores válidos. Las reglas de validación de las propiedades individuales se ejecutan antes que la regla ValidationRule del objeto 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>


En el ejemplo siguiente se muestran los controladores de eventos de la aplicación. Cuando el usuario hace clic en el botón de envío, la aplicación llama al método CommitEdit para ejecutar cada ValidationRule que está asociada al objeto BindingGroup. Si cada ValidationRule se ejecuta correctamente, el método CommitEdit guarda los valores en el objeto y finaliza la transacción de edición. Si el método CommitEdit se ejecuta correctamente, la aplicación comienza otra transacción de edición. Cuando se produce un error ValidationRule, el evento Validation.Error se produce porque la aplicación estableció NotifyOnValidationError en true, en BindingGroup (en el ejemplo anterior). ItemError administra el evento Validation.Error y muestra información sobre el error de validación al usuario. En el ejemplo también se controla el evento Loaded del control StackPanel y el evento Click del botón 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();
        }



El ejemplo siguiente muestra la ValidationRule personalizada en ValidateDateAndPrice, que se agregó a BindingGroup en el primer ejemplo. ValidationRule utiliza BindingGroup en su métodoValidate para obtener los valores el usuario escriba en el formulario, y comprueba que si un elemento está por encima de 100 dólares, estará disponible por al menos siete días.


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;

    }
}


.NET Framework

Compatible con: 4, 3.5 SP1, 3.0 SP2

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.
Mostrar: