BindingGroup Clase

Definición

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

public ref class BindingGroup : System::Windows::DependencyObject
public class BindingGroup : System.Windows.DependencyObject
type BindingGroup = class
    inherit DependencyObject
Public Class BindingGroup
Inherits DependencyObject
Herencia

Ejemplos

En los ejemplos siguientes se crea una aplicación que solicita al usuario que escriba la descripción y el precio de un artículo y la fecha en que expira la oferta. La aplicación muestra la información actual del elemento debajo del formulario. El usuario puede enviar o cancelar los cambios.

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

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

  • Llama a BeginEdit, CommitEdity CancelEdit en la lógica de la aplicación para habilitar la revierte los cambios.

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

En el ejemplo siguiente se crea la interfaz de usuario (UI) de la aplicación. La raíz StackPanel tiene un BindingGroup objeto que contiene un ValidationRule objeto que valida el elemento, como se ha descrito anteriormente. Los objetos de enlace de la Price propiedad y la OfferExpires propiedad forman parte de BindingGroup y cada enlace tiene un ValidationRule para asegurarse de que el precio y la fecha, respectivamente, son valores válidos. Las reglas de validación de las propiedades individuales se ejecutan antes de ValidationRule en .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 Enviar, la aplicación llama CommitEdit a para ejecutar cada una de las ValidationRule que está asociada a BindingGroup. Si cada se ValidationRule realiza correctamente, CommitEdit guarda los valores en el objeto y finaliza la transacción de edición. Si CommitEdit se ejecuta correctamente, la aplicación inicia otra transacción de edición. Cuando se produce un ValidationRule error, el Validation.Error evento se produce porque la aplicación se establece NotifyOnValidationErrortrue en en BindingGroup (en el ejemplo anterior). ItemError controla el Validation.Error evento y muestra información sobre el error de validación al usuario. En el ejemplo también se controla el Loaded evento de y StackPanel para Click el 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();
}

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

En el ejemplo siguiente se muestra el personalizado ValidationRuleValidateDateAndPrice, que se agregó al BindingGroup elemento en el primer ejemplo. ValidationRule usa en BindingGroup su Validate método para obtener los valores que el usuario escribió en el formulario y comprueba que si un elemento es superior a 100 dólares, estará disponible durante 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;
    }
}
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

Comentarios

Un BindingGroup objeto crea una relación entre varios enlaces, que se pueden validar y actualizar juntos. Por ejemplo, supongamos que una aplicación pide al usuario que escriba una dirección. A continuación, la aplicación rellena un objeto de tipo Address, que tiene las propiedades , Street, ZipCodeCity, y Country, con los valores proporcionados por el usuario. La aplicación tiene un panel que contiene cuatro TextBox controles, cada uno de los cuales es datos enlazados a una de las propiedades del objeto. Puede usar un ValidationRule objeto en para BindingGroup validar el Address objeto . Si los enlaces participan en el mismo BindingGroup, puede asegurarse de que el código postal es válido para el país o región de la dirección.

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

En el ejemplo de la dirección, supongamos que el DataContext de Panel se establece en el objeto de tipo Address. El enlace de cada TextBox uno se agrega al BindingGroup del panel.

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

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

Constructores

BindingGroup()

Inicializa una nueva instancia de la clase BindingGroup.

Propiedades

BindingExpressions

Obtiene una colección de objetos BindingExpression que contiene información para cada enlace del objeto BindingGroup.

CanRestoreValues

Obtiene si cada origen del enlace puede descartar los cambios pendientes y restaurar los valores originales.

DependencyObjectType

Obtiene el DependencyObjectType objeto que encapsula el tipo CLR de esta instancia.

(Heredado de DependencyObject)
Dispatcher

Obtiene el objeto Dispatcher al que está asociado DispatcherObject.

(Heredado de DispatcherObject)
HasValidationError

Obtiene un valor que indica si el BindingGroup tiene una regla de validación que da error.

IsDirty

Obtiene o establece un valor que indica si BindingGroup contiene un valor propuesto que no se ha escrito en el origen.

IsSealed

Obtiene un valor que indica si esta instancia está actualmente sellada (es de solo lectura).

(Heredado de DependencyObject)
Items

Obtiene los orígenes que usan los objetos de enlace de BindingGroup.

Name

Obtiene o establece el nombre que identifica el objeto BindingGroup, que se puede usar para incluir y excluir los objetos de enlace de BindingGroup.

NotifyOnValidationError

Obtiene o establece si el evento Error se provoca cuando cambia el estado de ValidationRule.

Owner

Obtiene el objeto al que está asignado este BindingGroup.

SharesProposedValues

Obtiene o establece un valor que indica si BindingGroup reutiliza los valores de destino que no se han confirmado en el origen.

ValidatesOnNotifyDataError

Obtiene o establece un valor que indica si se va a incluir el objeto NotifyDataErrorValidationRule.

ValidationErrors

Obtiene una colección de objetos ValidationError que ha hecho que BindingGroup no sea válido.

ValidationRules

Obtiene una colección de objetos ValidationRule que validan los objetos de origen de BindingGroup.

Métodos

BeginEdit()

Comienza una transacción de edición en los orígenes del BindingGroup.

CancelEdit()

Finaliza la transacción de edición y descarta los cambios pendientes.

CheckAccess()

Determina si el subproceso de la llamada tiene acceso a DispatcherObject.

(Heredado de DispatcherObject)
ClearValue(DependencyProperty)

Borra el valor local de una propiedad. La propiedad que se va a borrar se especifica mediante un identificador DependencyProperty.

(Heredado de DependencyObject)
ClearValue(DependencyPropertyKey)

Borra el valor local de una propiedad de solo lectura. La propiedad que se va a borrar se especifica mediante un DependencyPropertyKey.

(Heredado de DependencyObject)
CoerceValue(DependencyProperty)

Convierte el valor de la propiedad de dependencia especificada. Esto se logra invocando cualquier función CoerceValueCallback especificada en los metadatos de la propiedad de dependencia tal como existe en la clase DependencyObject que llama.

(Heredado de DependencyObject)
CommitEdit()

Ejecuta todos los objetos ValidationRule y actualiza los orígenes de enlace si todas las reglas de validación se ejecutan correctamente.

Equals(Object)

Determina si un objeto DependencyObject proporcionado es equivalente al objeto DependencyObject actual.

(Heredado de DependencyObject)
GetHashCode()

Obtiene un código hash de este objeto DependencyObject.

(Heredado de DependencyObject)
GetLocalValueEnumerator()

Crea un enumerador especializado para determinar qué propiedades de dependencia han establecido localmente los valores en DependencyObject.

(Heredado de DependencyObject)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
GetValue(DependencyProperty)

Devuelve el valor efectivo actual de una propiedad de dependencia en esta instancia de un DependencyObject.

(Heredado de DependencyObject)
GetValue(Object, String)

Devuelve el valor propuesto para la propiedad y elemento especificados.

InvalidateProperty(DependencyProperty)

Vuelve a evaluar el valor efectivo para la propiedad de dependencia especificada.

(Heredado de DependencyObject)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Se invoca cuando se actualiza el valor efectivo de alguna propiedad de dependencia en este DependencyObject. La propiedad de dependencia específica que cambió se notifica en los datos de evento.

(Heredado de DependencyObject)
ReadLocalValue(DependencyProperty)

Devuelve el valor local de una propiedad de dependencia, si existe.

(Heredado de DependencyObject)
SetCurrentValue(DependencyProperty, Object)

Establece el valor de una propiedad de dependencia sin cambiar el origen del valor.

(Heredado de DependencyObject)
SetValue(DependencyProperty, Object)

Establece el valor local de una propiedad de dependencia, especificado mediante el identificador de la propiedad de dependencia.

(Heredado de DependencyObject)
SetValue(DependencyPropertyKey, Object)

Establece el valor local de una propiedad de dependencia de solo lectura, especificado por el identificador DependencyPropertyKey de la propiedad de dependencia.

(Heredado de DependencyObject)
ShouldSerializeProperty(DependencyProperty)

Devuelve un valor que indica si los procesos de serialización deben serializar el valor de la propiedad de dependencia especificada.

(Heredado de DependencyObject)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)
TryGetValue(Object, String, Object)

Intenta obtener el valor propuesto para la propiedad y elemento especificados.

UpdateSources()

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

ValidateWithoutUpdate()

Ejecuta el convertidor en el enlace y los objetos ValidationRule que tienen la propiedad ValidationStep establecida en RawProposedValue o ConvertedProposedValue.

VerifyAccess()

Exige que el subproceso de la llamada tenga acceso a DispatcherObject.

(Heredado de DispatcherObject)

Se aplica a