BindingGroup Clase
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í.
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
, ZipCode
City
, 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:
El origen del enlace y el DataContext del elemento que tiene BindingGroup son el mismo objeto y la BindingGroupName propiedad no se establece.
La BindingGroupName propiedad del enlace es igual a de NameBindingGroup y no se establecen explícitamente en
null
.
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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de