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 k dosažení tohoto chování provede následující kroky.
BindingGroup Vytvoří a přidá kořen StackPanel při vytváření uživatelského rozhraní aplikace.
Volá BeginEdita CommitEditCancelEdit v logice aplikace umožňuje vrácení změn zpět.
Volání TryGetValue v Validate metodě, která získá vstup uživatele, a pak zkontroluje, jestli je položka přes 100 dolarů k dispozici nejméně sedm dní.
Následující příklad vytvoří uživatelské rozhraní aplikace. Kořenový adresář StackPanel obsahuje BindingGroupValidationRule položku, která ověří položku, jak je popsáno výše. Objekty vazby ve 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 objektem v objektu 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>
Následující příklad ukazuje obslužné rutiny událostí pro aplikaci. Když uživatel klikne na tlačítko Odeslat, aplikace zavolá CommitEdit ke spuštění každého ValidationRule , který je přidružený k sadě BindingGroup. Pokud je každá 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 je nastavená NotifyOnValidationError na true hodnotu BindingGroup (v předchozím příkladu).
ItemError
Validation.Error zpracovává událost a zobrazuje uživateli informace o chybě ověření. Příklad také zpracovává Loaded událost události pro StackPanel tlačítko Zrušit a Click událost.
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í ValidationRuleValidateDateAndPrice, který byl přidán do BindingGroup prvního příkladu. Pomocí ValidationRuleBindingGroup 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 nejméně 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
A BindingGroup vytvoří relaci mezi několika 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, StreetCity, , ZipCodea Country, hodnotami, které uživatel zadal. Aplikace má panel, který obsahuje čtyři TextBox ovládací prvky, z nichž každá je data svázaná s jednou z vlastností objektu. K ověření objektu můžete použít ValidationRule objekt v objektu BindingGroupAddress . Pokud se vazby účastní stejné BindingGroup, můžete zajistit, aby psč byl platný pro zemi nebo oblast adresy.
Vlastnost nastavíte BindingGroup na FrameworkElement hodnotu nebo FrameworkContentElement. Podřízené prvky dědí BindingGroup z nadřazených prvků stejně jako všechny ostatní děditelné vlastnosti. Vazba sestupně se přidá do elementu BindingGroup , pokud dojde k některé z následujících situací:
Zdroj vazby a DataContext prvek, který má BindingGroup stejný objekt a BindingGroupName vlastnost není nastavena.
Vlastnost BindingGroupName vazby je rovna Name a BindingGroup nejsou explicitně nastaveny na
null.
V příkladu adresy předpokládejme, že DataContextPanel je objekt typu nastaven na objekt Address. Vazba pro každý z nich TextBox se přidá na BindingGroup panel.
Objekty přidáte ValidationRule 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 a Items vlastnosti můžete použít TryGetValue metodu BindingGroup nebo GetValue(Object, String) získat zdroje vazeb.
Aktualizuje BindingGroup zdroje vazby současně místo každé vazby, které se aktualizují samostatně. Když zavoláte některou z metod pro ověření dat (ValidateWithoutUpdateUpdateSourcesnebo CommitEdit), vazba pro každý TextBox v příkladu je ověřena a potenciálně aktualizována. Pokud je vazba součástí BindingGroupvazby , zdroj vazby se neaktualizuje, dokud nezavoláte UpdateSources nebo CommitEdit na BindingGrouphodnotu , pokud explicitně nenastavíte UpdateSourceTrigger vlastnost.
Konstruktory
| Name | Description |
|---|---|
| BindingGroup() |
Inicializuje novou instanci BindingGroup třídy. |
Vlastnosti
| Name | Description |
|---|---|
| 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 |
Dispatcher Získá toto DispatcherObject je přidružené. (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 Binding objekty v objektu BindingGroup. |
| Name |
Získá nebo nastaví název, který identifikuje BindingGroup, který lze použít k zahrnutí a vyloučení Vazby objekty v objektu BindingGroup. |
| NotifyOnValidationError |
Získá nebo nastaví, zda Error událost nastane, když stav 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 BindingGroup znovu používá cílové hodnoty, 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 neplatné. |
| ValidationRules |
Získá kolekci ValidationRule objektů, které ověřují zdrojové objekty v objektu BindingGroup. |
Metody
| Name | Description |
|---|---|
| BeginEdit() |
Začíná upravit transakce na zdrojích v souboru BindingGroup. |
| CancelEdit() |
Ukončí transakci úprav a zahodí čekající změny. |
| CheckAccess() |
Určuje, zda volající vlákno má 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á má být vymazána, je určena parametrem DependencyPropertyKey. (Zděděno od DependencyObject) |
| CoerceValue(DependencyProperty) |
Převede hodnotu zadané vlastnosti závislosti. Toho se dosahuje 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 ValidationRule objekty a aktualizuje zdroje vazeb, pokud jsou všechna 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ávislosti mají místně nastavené hodnoty na tomto DependencyObject. (Zděděno od DependencyObject) |
| GetType() |
Získá Type aktuální instance. (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ří mělkou kopii aktuálního Object. (Zděděno od Object) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Vyvolána vždy, když byla aktualizována efektivní hodnota jakékoli vlastnosti závislosti na této DependencyObject vlastnosti. Konkrétní vlastnost závislosti, 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 jejího 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 identifikátorem DependencyPropertyKey vlastnosti závislosti. (Zděděno od DependencyObject) |
| ShouldSerializeProperty(DependencyProperty) |
Vrátí hodnotu, která určuje, zda procesy serializace mají serializovat hodnotu pro zadanou vlastnost závislosti. (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ěč na vazbě a ValidationRule objekty, které mají ValidationStep vlastnost nastavena 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, že volající vlákno má přístup k tomuto DispatcherObject. (Zděděno od DispatcherObject) |