FrameworkElement.BindingGroup Propiedad

Definición

Obtiene o establece el BindingGroup que se usa para el elemento.

C#
[System.Windows.Localizability(System.Windows.LocalizationCategory.NeverLocalize)]
public System.Windows.Data.BindingGroup BindingGroup { get; set; }

Valor de propiedad

BindingGroup

Objeto BindingGroup que se usa para el elemento.

Atributos

Ejemplos

Los ejemplos siguientes forman parte de una aplicación que comprueba si el usuario ha establecido las propiedades de dos objetos en valores iguales. En el primer ejemplo se crean dos TextBox controles, cada uno de los cuales está enlazado a un origen de datos diferente. StackPanel tiene un BindingGroup que contiene que ValidationRule comprueba que las dos cadenas son iguales.

XAML
<StackPanel>
  <StackPanel.Resources>
    <src:Type1 x:Key="object1" />
    <src:Type2 x:Key="object2" />
  </StackPanel.Resources>

  <StackPanel Name="sp1"
              Margin="5"
              DataContext="{Binding Source={StaticResource object1}}"
              Validation.ValidationAdornerSite="{Binding ElementName=label1}"
              Orientation="Horizontal"
              HorizontalAlignment="Center">

    <StackPanel.BindingGroup>
      <BindingGroup Name="bindingGroup">
        <BindingGroup.ValidationRules>
          <src:BindingGroupValidationRule ValidatesOnTargetUpdated="True" />
        </BindingGroup.ValidationRules>
      </BindingGroup>
    </StackPanel.BindingGroup>

    <TextBlock Text="First string" />

    <TextBox Width="150"
             Text="{Binding Path=PropertyA}" />

    <TextBlock Text="Second string" />

    <TextBox Width="150"
             Text="{Binding Source={StaticResource object2}, 
      Path=PropertyB, BindingGroupName=bindingGroup, 
      TargetNullValue=please enter a string}" />

  </StackPanel>

  <Label Name="label1"
         Content="{Binding ElementName=sp1, Path=(Validation.Errors)[0].ErrorContent}"
         Margin="5"
         Foreground="Red"
         HorizontalAlignment="Center" />

  <Button HorizontalAlignment="Center"
          Click="Button_Click"
          IsDefault="True">
    _Submit
  </Button>

  <StackPanel Orientation="Horizontal">
    <TextBlock Text="First string:"
               FontWeight="Bold" />
    <TextBlock Text="{Binding Source={StaticResource object1}, 
      Path=PropertyA, TargetNullValue=--}" />
  </StackPanel>

  <StackPanel Orientation="Horizontal">
    <TextBlock Text="Second string:"
               FontWeight="Bold" />
    <TextBlock Text="{Binding Source={StaticResource object2}, 
      Path=PropertyB, TargetNullValue=--}" />
  </StackPanel>
</StackPanel>

En el ejemplo siguiente se muestra el ValidationRule que usa el ejemplo anterior. En la invalidación del Validate método, el ejemplo obtiene cada objeto de origen de BindingGroup y comprueba si las propiedades de los objetos son iguales.

C#
public class Type1
{
    public string PropertyA { get; set; }

    public Type1()
    {
        PropertyA = "Default Value";
    }
}

public class Type2
{
    public string PropertyB { get; set; }

    public Type2()
    {
    }
}

public class BindingGroupValidationRule : ValidationRule
{
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        BindingGroup bg = value as BindingGroup;

        Type1 object1 = null;
        Type2 object2 = null;

        foreach (object item in bg.Items)
        {
            if (item is Type1)
            {
                object1 = item as Type1;
            }

            if (item is Type2)
            {
                object2 = item as Type2;
            }
        }

        if (object1 == null || object2 == null)
        {
            return new ValidationResult(false, "BindingGroup did not find source object.");
        }

        string string1 = bg.GetValue(object1, "PropertyA") as string;
        string string2 = bg.GetValue(object2, "PropertyB") as string;

        if (string1 != string2)
        {
            return new ValidationResult(false, "The two strings must be identical.");
        }

        return ValidationResult.ValidResult;
    }
}

Para invocar , ValidationRulellame al UpdateSources método . En el ejemplo siguiente se llama UpdateSources cuando se produce el evento click del botón.

C#
private void Button_Click(object sender, RoutedEventArgs e)
{
    sp1.BindingGroup.UpdateSources();
}

Comentarios

Se BindingGroup puede usar para validar los valores de varias propiedades de un objeto . Por ejemplo, supongamos que una aplicación solicita al usuario que escriba una dirección y, a continuación, rellene un objeto de tipo Address, que tiene las propiedades Street, City, ZipCodey Country, con los valores proporcionados por el usuario. La aplicación tiene un panel que contiene cuatro TextBox controles, cada uno de los cuales está enlazado a una de las propiedades del objeto. Puede usar en ValidationRule para BindingGroup validar el Address objeto . Por ejemplo, ValidationRule puede asegurarse de que el código postal es válido para el país o región de la dirección.

Los elementos secundarios heredan de BindingGroup sus elementos primarios, igual que con cualquier otra propiedad que se pueda heredar.

Información sobre propiedades de dependencia

Campo identificador BindingGroupProperty
Propiedades de metadatos establecidas en true Inherits

Se aplica a

Producto Versiones
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
Windows Desktop 3.0, 3.1, 5, 6, 7