Прочитать на английском

Поделиться через


FrameworkElement.BindingGroup Свойство

Определение

Возвращает или задает группу BindingGroup, которая используется для элемента.

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

Значение свойства

Группа BindingGroup, используемая для элемента.

Атрибуты

Примеры

Следующие примеры являются частью приложения, которое проверяет, установил ли пользователь свойства двух объектов равными значениям. В первом примере создаются два TextBox элемента управления, каждый из которых привязан к отдельному источнику данных. Имеет StackPanel объект , BindingGroup содержащий ValidationRule объект , который проверяет, равны ли две строки.

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>

В следующем примере показан объект , ValidationRule который используется в предыдущем примере. Validate В переопределении метода пример получает каждый исходный объект из BindingGroup и проверяет, равны ли свойства объектов.

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;
    }
}

Чтобы вызвать ValidationRule, вызовите UpdateSources метод . В следующем примере вызывается UpdateSources при возникновении события нажатия кнопки.

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

Комментарии

Можно BindingGroup использовать для проверки значений нескольких свойств объекта. Например, предположим, что приложение предлагает пользователю ввести адрес, а затем заполняет объект типа Address, который имеет свойства Street, CityZipCode, и Country, значениями, предоставленными пользователем. Приложение имеет панель, содержащую четыре TextBox элемента управления, каждый из которых привязан к одному из свойств объекта. Для проверки Address объекта можно использовать ValidationRule в BindingGroup . Например, ValidationRule может гарантировать, что почтовый индекс действителен для страны или региона адреса.

Дочерние элементы наследуют BindingGroup от родительских элементов, как и любое другое наследуемое свойство.

Сведения о свойстве зависимостей

Поле идентификатора BindingGroupProperty
Для свойств метаданных задано значение true Inherits

Применяется к

Продукт Версии
.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, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9