Exportar (0) Imprimir
Expandir todo
Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original.
Traducción
Original

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úblicoCheckAccessDetermina si el subproceso de la llamada tiene acceso a DispatcherObject. (Se hereda de DispatcherObject).
Método públicoClearValue(DependencyProperty)Borra el valor local de una propiedad. La propiedad que se va a 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. DependencyPropertyKey especifica la propiedad que se va a borrar. (Se hereda de DependencyObject).
Método públicoCoerceValueConvierte el valor de la propiedad de dependencia especificada. Esto se logra invocando cualquier función de CoerceValueCallback especificada en los metadatos de la propiedad de dependencia cuando existe en el objeto DependencyObject de llamada. (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úblicoEqualsDetermina si un objeto DependencyObject proporcionado es equivalente al objeto 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 la recolección de elementos no utilizados. (Se hereda de Object).
Método públicoGetHashCodeObtiene un código hash de este objeto 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 una 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 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 protegidoOnPropertyChangedSe invoca cada vez que se actualiza el valor actual de cualquier propiedad de dependencia en DependencyObject. Se informa de la propiedad de dependencia concreta que cambió en los datos de evento. (Se hereda de DependencyObject).
Método públicoReadLocalValueDevuelve el valor local de una 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 Retorna 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. Después, la aplicación rellena un objeto de tipo Address, que tiene las propiedades Street, City, ZipCode y Country, con los valores que el usuario proporcionó. 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 usar una regla ValidationRule en BindingGroup para validar el objeto Address. Si los enlaces participan del mismo BindingGroup, puede garantizar que el código postal sea 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 la dirección, supongamos que la propiedad DataContext de Panel está establecida en el objeto de 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.

En los ejemplos siguientes se crea una aplicación que pide al usuario que escriba la descripción y el precio de un artículo, así como la fecha en la que expira la oferta. 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 un objeto BindingGroup y le agrega el control StackPanel raíz cuando crea la user interface (UI) de la aplicación. 

  • Llama a los métodos BeginEdit, CommitEdit y CancelEdit en la lógica de la aplicación para habilitar la capacidad de revertir los cambios.

  • Llama a TryGetValue en un método Validate para obtener la entrada del usuario y, a continuación, comprobar que hay un artículo de más de 100 dólares disponible al menos durante siete días.

En el ejemplo siguiente se crea la user interface (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();
        }



En el ejemplo siguiente se muestra la regla ValidationRule ValidateDateAndPrice personalizada, que se agregó al objeto BindingGroup en el primer ejemplo. La regla ValidationRule usa el objeto BindingGroup en su método Validate para obtener los valores que el usuario especificó en el formulario y comprueba que, si un artículo supera los 100 dólares, estará disponible al menos durante 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.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft