BindingGroup Klasa

Definicja

Zawiera kolekcję powiązań i ValidationRule obiektów 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 datę wygaśnięcia oferty. Aplikacja wyświetla bieżące informacje o elemencie 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 element BindingGroup i dodaje go do katalogu głównego StackPanel podczas tworzenia interfejsu użytkownika aplikacji.

  • Wywołuje BeginEditmetody , CommitEditi CancelEdit w logice aplikacji, aby włączyć wycofywanie zmian.

  • Wywołuje TryGetValue metodę Validate w celu uzyskania danych wejściowych użytkownika, a następnie sprawdź, czy element powyżej 100 dolarów jest dostępny przez co najmniej siedem dni.

Poniższy przykład tworzy interfejs użytkownika aplikacji. Katalog główny StackPanel zawiera element BindingGroup , który ValidationRule weryfikuje element zgodnie z wcześniejszym opisem. Obiekty powiązania właściwości Price i OfferExpires właściwość stają się częścią BindingGroup elementu , a każde powiązanie ma wartość , 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 elementem ValidationRule 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 polecenie CommitEdit , aby uruchomić każdy ValidationRule , który jest skojarzony z elementem BindingGroup. Jeśli każda z nich ValidationRule powiedzie się, CommitEdit zapisuje wartości w obiekcie i kończy transakcję edycji. Jeśli CommitEdit operacja zakończy się pomyślnie, aplikacja rozpocznie kolejną transakcję edycji. W przypadku ValidationRule awarii Validation.Error zdarzenie występuje, ponieważ aplikacja ustawiona NotifyOnValidationError na true wartość BindingGroup (w poprzednim przykładzie). ItemErrorValidation.Error obsługuje zdarzenie i wyświetla informacje o błędzie weryfikacji dla użytkownika. Przykład obsługuje Loaded również zdarzenie dla StackPanel zdarzenia i 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 przedstawiono niestandardowy ValidationRule ValidateDateAndPriceelement , który został dodany do BindingGroup elementu w pierwszym przykładzie. Metoda ValidationRule używa BindingGroup metody w Validate celu pobrania wartości wprowadzonych przez użytkownika w formularzu i sprawdza, czy jeśli element wynosi 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

Element 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 TextBox kontrolki, z których każda jest powiązana z jedną z właściwości obiektu. Możesz użyć elementu w obiekcie ValidationRule BindingGroup , aby zweryfikować Address obiekt. Jeśli powiązania uczestniczą w tym samym BindingGrouppliku , możesz upewnić się, że kod pocztowy jest prawidłowy dla kraju/regionu adresu.

Właściwość jest ustawiana BindingGroup na lub FrameworkContentElementFrameworkElement . Elementy podrzędne dziedziczą BindingGroup po swoich elementach nadrzędnych, podobnie jak w przypadku każdej innej właściwości dziedziczonej. Powiązanie elementu malejąco jest dodawane do BindingGroup elementu , jeśli wystąpi jedna z następujących sytuacji:

W przykładzie adresu załóżmy, że właściwość DataContext Panel jest ustawiona na obiekt typu Address. Powiązanie dla każdego z nich TextBox jest dodawane do BindingGroup panelu.

Obiekty są dodawane ValidationRule do obiektu BindingGroup. Parametr BindingGroup jest przekazywany jako pierwszy parametr Validate metody podczas uruchamiania ValidationRule . Możesz użyć TryGetValue metody BindingGroup orGetValue(Object, String), aby uzyskać proponowane wartości obiektu i Items właściwość w celu pobrania źródeł powiązań.

Element BindingGroup aktualizuje źródła powiązania jednocześnie zamiast każdego powiązania aktualizowanego oddzielnie. Po wywołaniu jednej z metod weryfikacji danych (ValidateWithoutUpdate, UpdateSourceslub CommitEdit), powiązanie dla każdego TextBox z nich w przykładzie jest weryfikowane i potencjalnie aktualizowane. Gdy powiązanie jest częścią BindingGroupelementu , źródło powiązania nie jest aktualizowane, dopóki nie wywołasz UpdateSources lub CommitEdit na BindingGroupobiekcie , chyba że jawnie ustawisz UpdateSourceTrigger właściwość .

Konstruktory

BindingGroup()

Inicjuje nowe wystąpienie klasy BindingGroup.

Właściwości

BindingExpressions

Pobiera kolekcję BindingExpression obiektów zawierających informacje dotyczące każdego powiązania w elemecie 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 klasę DependencyObjectType , która opakowuje typ CLR tego wystąpienia.

(Odziedziczone po DependencyObject)
Dispatcher

Dispatcher Pobiera tę DispatcherObject wartość skojarzona z.

(Odziedziczone po DispatcherObject)
HasValidationError

Pobiera wartość wskazującą, czy BindingGroup reguła weryfikacji zakończyła się niepowodzeniem.

IsDirty

Pobiera lub ustawia wartość wskazującą, czy zawiera BindingGroup 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 Powiązania w obiekcie BindingGroup.

Name

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

NotifyOnValidationError

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

Owner

Pobiera obiekt, do którego przypisano ten BindingGroup obiekt.

SharesProposedValues

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

ValidatesOnNotifyDataError

Pobiera lub ustawia wartość wskazującą, czy należy dołączyć element NotifyDataErrorValidationRule.

ValidationErrors

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

ValidationRules

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

Metody

BeginEdit()

Rozpoczyna edycję transakcji w źródłach w elemecie BindingGroup.

CancelEdit()

Kończy edycję transakcji i odrzuca oczekujące zmiany.

CheckAccess()

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

(Odziedziczone po DispatcherObject)
ClearValue(DependencyProperty)

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

(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 element 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 CoerceValueCallback funkcji określonej w metadanych właściwości dla właściwości zależności, ponieważ istnieje w wywołaniu DependencyObject.

(Odziedziczone po DependencyObject)
CommitEdit()

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

Equals(Object)

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

(Odziedziczone po DependencyObject)
GetHashCode()

Pobiera kod skrótu dla tego DependencyObjectpliku .

(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 dla tego DependencyObjectelementu .

(Odziedziczone po DependencyObject)
GetType()

Type Pobiera wartość 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 klasy DependencyObject.

(Odziedziczone po DependencyObject)
GetValue(Object, String)

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

InvalidateProperty(DependencyProperty)

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

(Odziedziczone po DependencyObject)
MemberwiseClone()

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

(Odziedziczone po Object)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Wywoływane za każdym razem, gdy zostanie zaktualizowana efektywna wartość dowolnej właściwości DependencyObject zależności. Określona właściwość zależności, która została zmieniona, 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 jej ź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ślonej przez DependencyPropertyKey identyfikator właściwości zależności.

(Odziedziczone po DependencyObject)
ShouldSerializeProperty(DependencyProperty)

Zwraca wartość wskazującą, czy procesy serializacji powinny serializować wartość dla 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 i ValidationRule obiekty, które mają ValidationStep właściwość ustawioną na RawProposedValue, ConvertedProposedValuelub UpdatedValue , i zapisuje wartości obiektów docelowych w obiektach źródłowych, jeśli wszystkie reguły weryfikacji powiedzą się.

ValidateWithoutUpdate()

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

VerifyAccess()

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

(Odziedziczone po DispatcherObject)

Dotyczy