Udostępnij za pośrednictwem


BindingGroup Klasa

Definicja

Zawiera kolekcję powiązań i obiektów ValidationRule używanych do sprawdzania poprawności obiektu.

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

Przykłady

W poniższych przykładach utworzono aplikację, która monituje użytkownika o wprowadzenie opisu i ceny elementu oraz daty wygaśnięcia oferty. Aplikacja wyświetla bieżące informacje dotyczące elementu poniżej formularza. Użytkownik może przesłać lub anulować zmiany.

Aplikacja wykonuje następujące czynności, aby osiągnąć to zachowanie.

  • Tworzy BindingGroup i dodaje go do głównego StackPanel podczas tworzenia interfejsu użytkownika aplikacji.

  • Wywołuje BeginEdit, CommitEditi CancelEdit w logice aplikacji, aby umożliwić wycofywanie zmian.

  • Wywołuje metodę TryGetValue w metodzie Validate, aby uzyskać dane wejściowe użytkownika, a następnie sprawdź, czy element o wartości ponad 100 dolarów jest dostępny przez co najmniej siedem dni.

Poniższy przykład tworzy interfejs użytkownika aplikacji. StackPanel główny ma BindingGroup, który zawiera ValidationRule, który weryfikuje element zgodnie z wcześniejszym opisem. Obiekty powiązania we właściwości Price i właściwość OfferExpires stają się częścią BindingGroup, a każde powiązanie ma ValidationRule, aby upewnić się, że odpowiednio cena i data są prawidłowymi wartościami. Reguły sprawdzania poprawności poszczególnych właściwości są uruchamiane przed ValidationRule w 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>

W poniższym przykładzie przedstawiono programy obsługi zdarzeń dla aplikacji. Gdy użytkownik kliknie przycisk Prześlij, aplikacja wywołuje CommitEdit, aby uruchomić każdy ValidationRule skojarzony z BindingGroup. Jeśli każda ValidationRule zakończy się pomyślnie, CommitEdit zapisuje wartości w obiekcie i kończy transakcję edycji. Jeśli CommitEdit zakończy się pomyślnie, aplikacja rozpocznie kolejną transakcję edycji. Gdy ValidationRule kończy się niepowodzeniem, zdarzenie Validation.Error występuje, ponieważ aplikacja ustawiła NotifyOnValidationError na true na BindingGroup (w poprzednim przykładzie). ItemError obsługuje zdarzenie Validation.Error i wyświetla informacje o błędzie weryfikacji dla użytkownika. Przykład obsługuje również zdarzenie Loaded dla StackPanel i zdarzenie Click dla przycisku Anuluj.


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

W poniższym przykładzie pokazano niestandardowe ValidationRuleValidateDateAndPrice, które zostały dodane do BindingGroup w pierwszym przykładzie. ValidationRule używa BindingGroup w metodzie Validate, aby uzyskać wartości wprowadzone przez użytkownika w formularzu i sprawdza, czy element jest ponad 100 dolarów, będzie dostępny przez co najmniej siedem dni.

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

Uwagi

BindingGroup tworzy relację między wieloma powiązaniami, które można zweryfikować i zaktualizować razem. Załóżmy na przykład, że aplikacja monituje użytkownika o wprowadzenie adresu. Następnie aplikacja wypełnia obiekt typu Address, który ma właściwości, Street, City, ZipCodei Country, z wartościami podanymi przez użytkownika. Aplikacja ma panel zawierający cztery kontrolki TextBox, z których każda jest danymi powiązanymi z jedną z właściwości obiektu. Aby zweryfikować obiekt Address, możesz użyć ValidationRule w BindingGroup. Jeśli powiązania uczestniczą w tym samym BindingGroup, możesz upewnić się, że kod pocztowy jest prawidłowy dla kraju/regionu adresu.

Należy ustawić właściwość BindingGroup na FrameworkElement lub FrameworkContentElement. Elementy podrzędne dziedziczą BindingGroup z ich elementów nadrzędnych, podobnie jak w przypadku każdej innej właściwości dziedziczonej. Powiązanie elementu malejąco jest dodawane do BindingGroup, jeśli wystąpi jedna z następujących sytuacji:

W przykładzie adresu załóżmy, że DataContextPanel jest ustawiona na obiekt typu Address. Powiązanie dla każdego TextBox jest dodawane do BindingGroup panelu.

Obiekty ValidationRule są dodawane do BindingGroup. BindingGroup jest przekazywany jako pierwszy parametr metody Validate po uruchomieniu ValidationRule. Możesz użyć metody TryGetValue lub GetValue(Object, String) w tej BindingGroup, aby uzyskać proponowane wartości obiektu, a właściwość Items, aby uzyskać źródła powiązań.

BindingGroup aktualizuje źródła powiązania w tym samym czasie zamiast każdego powiązania aktualizowanego oddzielnie. Podczas wywoływania jednej z metod sprawdzania poprawności danych (ValidateWithoutUpdate, UpdateSourceslub CommitEdit) powiązanie dla każdego TextBox w przykładzie jest weryfikowane i potencjalnie aktualizowane. Gdy powiązanie jest częścią BindingGroup, źródło powiązania nie zostanie zaktualizowane do momentu wywołania UpdateSources lub CommitEdit w BindingGroup, chyba że jawnie ustawisz właściwość UpdateSourceTrigger.

Konstruktory

BindingGroup()

Inicjuje nowe wystąpienie klasy BindingGroup.

Właściwości

BindingExpressions

Pobiera kolekcję obiektów BindingExpression, które zawierają informacje dotyczące każdego powiązania w BindingGroup.

CanRestoreValues

Pobiera, czy każde źródło w powiązaniu może odrzucić oczekujące zmiany i przywrócić oryginalne wartości.

DependencyObjectType

Pobiera DependencyObjectType, który opakowuje typ CLR tego wystąpienia.

(Odziedziczone po DependencyObject)
Dispatcher

Pobiera Dispatcher jest skojarzony z tym DispatcherObject.

(Odziedziczone po DispatcherObject)
HasValidationError

Pobiera wartość wskazującą, czy BindingGroup ma regułę sprawdzania poprawności, która zakończyła się niepowodzeniem.

IsDirty

Pobiera lub ustawia wartość wskazującą, czy BindingGroup zawiera proponowaną wartość, która nie została zapisana w źródle.

IsSealed

Pobiera wartość wskazującą, czy to wystąpienie jest obecnie zapieczętowane (tylko do odczytu).

(Odziedziczone po DependencyObject)
Items

Pobiera źródła, które są używane przez obiekty Binding w BindingGroup.

Name

Pobiera lub ustawia nazwę identyfikującą BindingGroup, która może służyć do dołączania i wykluczania obiektów powiązania w BindingGroup.

NotifyOnValidationError

Pobiera lub ustawia, czy zdarzenie Error występuje, gdy stan ValidationRule się zmienia.

Owner

Pobiera obiekt, do którego przypisano ten BindingGroup.

SharesProposedValues

Pobiera lub ustawia wartość wskazującą, czy BindingGroup ponownie używa wartości docelowych, które nie zostały zatwierdzone w źródle.

ValidatesOnNotifyDataError

Pobiera lub ustawia wartość wskazującą, czy należy uwzględnić NotifyDataErrorValidationRule.

ValidationErrors

Pobiera kolekcję obiektów ValidationError, które spowodowały, że BindingGroup były nieprawidłowe.

ValidationRules

Pobiera kolekcję obiektów ValidationRule, które weryfikują obiekty źródłowe w BindingGroup.

Metody

BeginEdit()

Rozpoczyna transakcję edycji źródeł w BindingGroup.

CancelEdit()

Kończy transakcję edycji i odrzuca oczekujące zmiany.

CheckAccess()

Określa, czy wątek wywołujący ma dostęp do tego DispatcherObject.

(Odziedziczone po DispatcherObject)
ClearValue(DependencyProperty)

Czyści wartość lokalną właściwości. Właściwość do wyczyszczenia jest określana przez identyfikator DependencyProperty.

(Odziedziczone po DependencyObject)
ClearValue(DependencyPropertyKey)

Czyści wartość lokalną właściwości tylko do odczytu. Właściwość do wyczyszczenia jest określana przez DependencyPropertyKey.

(Odziedziczone po DependencyObject)
CoerceValue(DependencyProperty)

Przekształca wartość określonej właściwości zależności. Jest to realizowane przez wywołanie dowolnej funkcji CoerceValueCallback określonej w metadanych właściwości dla właściwości, ponieważ istnieje w wywołaniu DependencyObject.

(Odziedziczone po DependencyObject)
CommitEdit()

Uruchamia wszystkie obiekty ValidationRule i aktualizuje źródła powiązań, jeśli wszystkie reguły walidacji powiedzie się.

Equals(Object)

Określa, czy podany DependencyObject jest odpowiednikiem bieżącego DependencyObject.

(Odziedziczone po DependencyObject)
GetHashCode()

Pobiera kod skrótu dla tego DependencyObject.

(Odziedziczone po DependencyObject)
GetLocalValueEnumerator()

Tworzy wyspecjalizowany moduł wyliczający do określania, które właściwości zależności mają lokalnie ustawione wartości na tym DependencyObject.

(Odziedziczone po DependencyObject)
GetType()

Pobiera Type bieżącego wystąpienia.

(Odziedziczone po Object)
GetValue(DependencyProperty)

Zwraca bieżącą obowiązującą wartość właściwości zależności dla tego wystąpienia DependencyObject.

(Odziedziczone po DependencyObject)
GetValue(Object, String)

Zwraca proponowaną wartość dla określonej właściwości i elementu.

InvalidateProperty(DependencyProperty)

Ponownie oblicza obowiązującą wartość dla określonej właściwości zależności.

(Odziedziczone po DependencyObject)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Object.

(Odziedziczone po Object)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Wywoływane za każdym razem, gdy wartość efektywna dowolnej właściwości zależności na tym DependencyObject została zaktualizowana. Określona właściwość zależności, która uległa zmianie, jest zgłaszana w danych zdarzenia.

(Odziedziczone po DependencyObject)
ReadLocalValue(DependencyProperty)

Zwraca wartość lokalną właściwości zależności, jeśli istnieje.

(Odziedziczone po DependencyObject)
SetCurrentValue(DependencyProperty, Object)

Ustawia wartość właściwości zależności bez zmieniania źródła wartości.

(Odziedziczone po DependencyObject)
SetValue(DependencyProperty, Object)

Ustawia wartość lokalną właściwości zależności określonej przez jej identyfikator właściwości zależności.

(Odziedziczone po DependencyObject)
SetValue(DependencyPropertyKey, Object)

Ustawia wartość lokalną właściwości zależności tylko do odczytu określoną przez identyfikator DependencyPropertyKey właściwości zależności.

(Odziedziczone po DependencyObject)
ShouldSerializeProperty(DependencyProperty)

Zwraca wartość wskazującą, czy procesy serializacji powinny serializować wartość podanej właściwości zależności.

(Odziedziczone po DependencyObject)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)
TryGetValue(Object, String, Object)

Próbuje uzyskać proponowaną wartość dla określonej właściwości i elementu.

UpdateSources()

Uruchamia konwerter w powiązaniu, a obiekty ValidationRule, które mają właściwość ValidationStep ustawioną na RawProposedValue, ConvertedProposedValuelub UpdatedValue, i zapisuje wartości obiektów docelowych w obiektach źródłowych, jeśli wszystkie reguły sprawdzania poprawności powiedzą się.

ValidateWithoutUpdate()

Uruchamia konwerter na powiązaniu, a obiekty ValidationRule, które mają właściwość ValidationStep ustawioną na RawProposedValue lub ConvertedProposedValue.

VerifyAccess()

Wymusza, że wątek wywołujący ma dostęp do tego DispatcherObject.

(Odziedziczone po DispatcherObject)

Dotyczy