BindingGroup Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Obsahuje kolekci vazeb a ValidationRule objektů, které slouží k ověření objektu.
public ref class BindingGroup : System::Windows::DependencyObject
public class BindingGroup : System.Windows.DependencyObject
type BindingGroup = class
inherit DependencyObject
Public Class BindingGroup
Inherits DependencyObject
- Dědičnost
Příklady
Následující příklady vytvoří aplikaci, která uživatele vyzve k zadání popisu a ceny položky a data vypršení platnosti nabídky. Aplikace zobrazí aktuální informace o položce pod formulářem. Uživatel může změny odeslat nebo zrušit.
Aplikace provede následující kroky k dosažení tohoto chování.
BindingGroup Vytvoří a přidá StackPanel kořen, když vytvoří uživatelské rozhraní aplikace.
Volání BeginEdit, CommitEdita CancelEdit v logice aplikace umožňující vrácení změn zpět.
Zavolá TryGetValue metodu Validate , aby získal vstup uživatele a pak zkontroluje, jestli je položka nad 100 dolarů k dispozici alespoň sedm dní.
Následující příklad vytvoří uživatelské rozhraní (UI) aplikace. Kořen StackPanel obsahuje BindingGroup text, který ValidationRule ověří položku, jak je popsáno výše. Objekty vazeb na Price
vlastnosti a OfferExpires
vlastnost se stanou součástí BindingGroup a každá vazba má jistotu ValidationRule , že cena a datum jsou platné hodnoty. Ověřovací pravidla pro jednotlivé vlastnosti se spouští před na ValidationRule straně 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>
Následující příklad ukazuje obslužné rutiny událostí pro aplikaci. Když uživatel klikne na tlačítko Odeslat, aplikace volá CommitEdit spuštění každého ValidationRule , který je přidružený k sadě BindingGroup. Pokud bude každý z nich ValidationRule úspěšný, CommitEdit uloží hodnoty do objektu a ukončí transakci úprav. Pokud CommitEdit je aplikace úspěšná, zahájí další transakci úprav. ValidationRule Pokud dojde k chybě, dojde k události, Validation.Error protože aplikace nastavená NotifyOnValidationError na BindingGroup true
hodnotu (v předchozím příkladu). ItemError
Validation.Error zpracuje událost a zobrazí informace o chybě ověření uživateli. Příklad také zpracovává Loaded událost pro StackPanel událost a Click událost pro tlačítko Storno .
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
Následující příklad ukazuje vlastní ValidationRule ValidateDateAndPrice
, který byl přidán do prvního příkladu BindingGroup . Pomocí ValidationRule BindingGroup metody Validate získá hodnoty, které uživatel zadal do formuláře, a zkontroluje, že pokud je položka více než 100 dolarů, bude k dispozici alespoň sedm dní.
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
Poznámky
Vytvoří BindingGroup relaci mezi více vazbami, které lze ověřit a aktualizovat společně. Předpokládejme například, že aplikace vyzve uživatele k zadání adresy. Aplikace pak naplní objekt typuAddress
, který má vlastnosti, Street
, , City``ZipCode
a , Country
s hodnotami, které uživatel zadal. Aplikace má panel, který obsahuje čtyři TextBox ovládací prvky, z nichž každá je svázaná s jednou z vlastností objektu. K ověření objektu můžete použít ValidationRule in aBindingGroup.Address
Pokud se vazby účastní stejné BindingGroup, můžete zajistit, aby psčovací kód byl platný pro zemi nebo oblast adresy.
Vlastnost nastavíte BindingGroup na FrameworkElement nebo FrameworkContentElement. Podřízené prvky dědí BindingGroup z nadřazených prvků stejně jako všechny ostatní zděděné vlastnosti. Vazba na sestupný prvek se přidá do BindingGroup některé z následujících situací:
Zdroj vazby a DataContext element, který má BindingGroup stejný objekt, a BindingGroupName vlastnost není nastavena.
BindingGroupName Vlastnost vazby je rovna hodnotě Name BindingGroup a nejsou explicitně nastaveny na
null
.
V příkladu adresy předpokládejme, že DataContext Panel je nastavena na objekt typu Address
. Vazba pro každou z nich TextBox se přidá na BindingGroup panel.
ValidationRule Přidáte objekty do objektu BindingGroup. Při BindingGroup spuštění se předá jako první parametr Validate metody ValidationRule . K získání navrhovaných hodnot objektu můžete použít TryGetValue metodu nebo GetValue(Object, String) BindingGroup metodu Items a vlastnost získat zdroje vazeb.
Aktualizuje BindingGroup zdroje vazby současně místo každé vazby, které se aktualizují samostatně. Když zavoláte jednu z metod k ověření dat (ValidateWithoutUpdateUpdateSourcesnebo CommitEdit), vazba pro každý TextBox z příkladů se ověří a potenciálně aktualizuje. Pokud je vazba součástí BindingGroupvazby , zdroj vazby se neaktualizuje, dokud nezavoláte UpdateSources nebo CommitEdit na něm BindingGroup, pokud vlastnost explicitně nenastavíte UpdateSourceTrigger .
Konstruktory
BindingGroup() |
Inicializuje novou instanci BindingGroup třídy. |
Vlastnosti
BindingExpressions |
Získá kolekci BindingExpression objektů, které obsahují informace pro každou vazbu v objektu BindingGroup. |
CanRestoreValues |
Získá, zda každý zdroj v vazbě může zahodit čekající změny a obnovit původní hodnoty. |
DependencyObjectType |
DependencyObjectType Získá ten, který zabalí typ CLR této instance. (Zděděno od DependencyObject) |
Dispatcher |
Získá to DispatcherObject je přidruženoDispatcher. (Zděděno od DispatcherObject) |
HasValidationError |
Získá hodnotu, která označuje, zda BindingGroup má neúspěšné ověřovací pravidlo. |
IsDirty |
Získá nebo nastaví hodnotu, která označuje, zda BindingGroup obsahuje navrženou hodnotu, která nebyla zapsána do zdroje. |
IsSealed |
Získá hodnotu, která označuje, zda je tato instance aktuálně zapečetěna (jen pro čtení). (Zděděno od DependencyObject) |
Items |
Získá zdroje, které jsou používány vazby objekty v .BindingGroup |
Name |
Získá nebo nastaví název, který identifikuje BindingGroup, který lze použít k zahrnutí a vyloučení vazeb objektů v souboru BindingGroup. |
NotifyOnValidationError |
Získá nebo nastaví, zda dojde k Error události při stavu ValidationRule změny. |
Owner |
Získá objekt, ke kterému je přiřazen BindingGroup . |
SharesProposedValues |
Získá nebo nastaví hodnotu, která označuje, zda opakované BindingGroup použití cílových hodnot, které nebyly potvrzeny do zdroje. |
ValidatesOnNotifyDataError |
Získá nebo nastaví hodnotu, která označuje, zda zahrnout NotifyDataErrorValidationRule. |
ValidationErrors |
Získá kolekci ValidationError objektů, které způsobily BindingGroup být neplatné. |
ValidationRules |
Získá kolekci ValidationRule objektů, které ověřují zdrojové objekty v objektu BindingGroup. |
Metody
BeginEdit() |
Zahájí transakci úprav na zdrojích v sadě BindingGroup. |
CancelEdit() |
Ukončí transakci úprav a zahodí čekající změny. |
CheckAccess() |
Určuje, zda má volající vlákno přístup k tomuto DispatcherObject. (Zděděno od DispatcherObject) |
ClearValue(DependencyProperty) |
Vymaže místní hodnotu vlastnosti. Vlastnost, která se má vymazat, je určena identifikátorem DependencyProperty . (Zděděno od DependencyObject) |
ClearValue(DependencyPropertyKey) |
Vymaže místní hodnotu vlastnosti jen pro čtení. Vlastnost, která se má vymazat, je určena parametrem DependencyPropertyKey. (Zděděno od DependencyObject) |
CoerceValue(DependencyProperty) |
Převede hodnotu zadané vlastnosti závislosti. To se provádí vyvoláním jakékoli CoerceValueCallback funkce zadané v metadatech vlastností pro vlastnost závislosti, protože existuje ve volání DependencyObject. (Zděděno od DependencyObject) |
CommitEdit() |
Spustí všechny objekty a aktualizuje zdroje vazeb, pokud jsou všechna ValidationRule ověřovací pravidla úspěšná. |
Equals(Object) |
Určuje, zda je poskytnutá DependencyObject hodnota ekvivalentní aktuálnímu DependencyObject. (Zděděno od DependencyObject) |
GetHashCode() |
Získá hash kód pro tento DependencyObject. (Zděděno od DependencyObject) |
GetLocalValueEnumerator() |
Vytvoří specializovaný enumerátor pro určení, které vlastnosti závislostí mají místně nastavené hodnoty na tomto DependencyObject. (Zděděno od DependencyObject) |
GetType() |
Type Získá aktuální instanci. (Zděděno od Object) |
GetValue(DependencyProperty) |
Vrátí aktuální efektivní hodnotu vlastnosti závislosti na této instanci objektu DependencyObject. (Zděděno od DependencyObject) |
GetValue(Object, String) |
Vrátí navrženou hodnotu pro zadanou vlastnost a položku. |
InvalidateProperty(DependencyProperty) |
Znovu vyhodnotí efektivní hodnotu pro zadanou vlastnost závislosti. (Zděděno od DependencyObject) |
MemberwiseClone() |
Vytvoří použádnou kopii aktuálního souboru Object. (Zděděno od Object) |
OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Vyvolá se při každé aktualizaci efektivní hodnoty jakékoli vlastnosti závislosti na této DependencyObject vlastnosti. Specifická vlastnost závislostí, která se změnila, je hlášena v datech události. (Zděděno od DependencyObject) |
ReadLocalValue(DependencyProperty) |
Vrátí místní hodnotu vlastnosti závislosti, pokud existuje. (Zděděno od DependencyObject) |
SetCurrentValue(DependencyProperty, Object) |
Nastaví hodnotu vlastnosti závislosti beze změny zdroje hodnot. (Zděděno od DependencyObject) |
SetValue(DependencyProperty, Object) |
Nastaví místní hodnotu vlastnosti závislosti určenou jeho identifikátorem vlastnosti závislosti. (Zděděno od DependencyObject) |
SetValue(DependencyPropertyKey, Object) |
Nastaví místní hodnotu vlastnosti závislosti jen pro čtení určenou DependencyPropertyKey identifikátorem vlastnosti závislosti. (Zděděno od DependencyObject) |
ShouldSerializeProperty(DependencyProperty) |
Vrátí hodnotu, která označuje, zda serializační procesy mají serializovat hodnotu pro zadanou vlastnost závislostí. (Zděděno od DependencyObject) |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
TryGetValue(Object, String, Object) |
Pokusí se získat navrženou hodnotu pro zadanou vlastnost a položku. |
UpdateSources() |
Spustí převaděč pro vazbu a ValidationRule objekty, které mají vlastnost nastavena ValidationStep na RawProposedValue, ConvertedProposedValuenebo UpdatedValue a uloží hodnoty cílů do zdrojových objektů, pokud jsou všechna ověřovací pravidla úspěšná. |
ValidateWithoutUpdate() |
Spustí převaděč na vazbě a ValidationRule objekty, které mají vlastnost nastavenou ValidationStep na RawProposedValue nebo ConvertedProposedValue. |
VerifyAccess() |
Vynucuje, aby volající vlákno má k tomuto DispatcherObjectpřístupu přístup . (Zděděno od DispatcherObject) |