BindingGroup Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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 BindingGroupValidationRule , który 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 ValidationRuleBindingGroup.
<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). ItemError
Validation.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 ValidationRuleValidateDateAndPrice
element , 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
, ZipCode
i 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 ValidationRuleBindingGroup , 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:
Źródło powiązania i DataContext element, który ma BindingGroup ten sam obiekt, a właściwość nie jest ustawiona BindingGroupName .
Właściwość BindingGroupName powiązania jest równa Name wartości i BindingGroup nie są jawnie ustawione na
null
wartość .
W przykładzie adresu załóżmy, że właściwość DataContextPanel 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 |
DependencyObjectType Pobiera opakowujący 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 DependencyPropertyKeyelement . (Odziedziczone po DependencyObject) |
CoerceValue(DependencyProperty) |
Coerce 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 weryfikacji 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 pliku 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 w tym DependencyObjectelemecie . (Odziedziczone po DependencyObject) |
GetType() |
Type Pobiera bieżące wystąpienie. (Odziedziczone po Object) |
GetValue(DependencyProperty) |
Zwraca bieżącą obowiązującą wartość właściwości zależności dla tego wystąpienia obiektu 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 obowiązująca wartość dowolnej właściwości zależności została DependencyObject 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 zmiany źródła wartości. (Odziedziczone po DependencyObject) |
SetValue(DependencyProperty, Object) |
Ustawia wartość lokalną właściwości zależności określonej przez jego 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ślona 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ść 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 walidacji 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
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla