BindingGroup Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Egy objektum ellenőrzéséhez használt kötések és ValidationRule objektumok gyűjteményét tartalmazza.
public ref class BindingGroup : System::Windows::DependencyObject
public class BindingGroup : System.Windows.DependencyObject
type BindingGroup = class
inherit DependencyObject
Public Class BindingGroup
Inherits DependencyObject
- Öröklődés
Példák
Az alábbi példák létrehoznak egy alkalmazást, amely arra kéri a felhasználót, hogy adja meg egy elem leírását és árát, valamint az ajánlat lejáratának dátumát. Az alkalmazás megjeleníti az űrlap alatti elem aktuális adatait. A felhasználó elküldheti vagy megszakíthatja a módosításokat.
Az alkalmazás a következő lépéseket teszi ennek a viselkedésnek a eléréséhez.
BindingGroup Létrehozza és hozzáadja azt a gyökérhezStackPanel, amikor létrehozza az alkalmazás felhasználói felületét (UI).
Meghívja BeginEdit, CommitEditmajd CancelEdit az alkalmazás logikájában engedélyezi a módosítások visszaállítását.
Meghív TryGetValue egy metódust Validate a felhasználó bemenetének lekéréséhez, majd ellenőrizze, hogy egy 100 dollárnál nagyobb tétel legalább hét napig elérhető-e.
Az alábbi példa létrehozza az alkalmazás felhasználói felületét (UI). A gyökér StackPanel olyan elemekkel BindingGroup rendelkezik, amelyek ValidationRule a korábban ismertetett módon ellenőrzik az elemet. A tulajdonság és a PriceOfferExpires tulajdonság kötési objektumai a tulajdonság részévé BindingGroup válnak, és minden kötésnek van egy-egy ValidationRule eleme, hogy az ár és a dátum érvényes értékek legyenek. Az egyes tulajdonságok érvényesítési szabályai a ValidationRuleBindingGroupelőtt futnak.
<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>
Az alábbi példában az alkalmazás eseménykezelői láthatók. Amikor a felhasználó a Küldés gombra kattint, az alkalmazás meghívja CommitEdit , hogy futtassa azokat ValidationRule , amelyek a BindingGroup. Ha mindegyik ValidationRule sikeres, menti az értékeket az objektumba, CommitEdit és befejezi a szerkesztési tranzakciót. Ha CommitEdit sikeres, az alkalmazás egy másik szerkesztési tranzakciót indít el.
ValidationRule Sikertelen esemény esetén az Validation.Error esemény azért következik be, mert az alkalmazás az NotifyOnValidationError (előző példában) értékre true van állítvaBindingGroup.
ItemError kezeli az eseményt Validation.Error , és megjeleníti az érvényesítési hibával kapcsolatos információkat a felhasználó számára. A példa a LoadedStackPanel gomb eseményét Click és eseményét is kezeli.
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
Az alábbi példában az első példában szereplő ValidationRule egyéni ValidateDateAndPriceBindingGroupelem látható. A ValidationRule metódus használatával BindingGroupValidate lekérheti a felhasználó által az űrlapba bevitt értékeket, és ellenőrzi, hogy ha egy elem több mint 100 dollár, akkor legalább hét napig elérhető lesz.
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
Megjegyzések
A BindingGroup kapcsolat több kötés között jön létre, amelyek együttesen érvényesíthetők és frissíthetők. Tegyük fel például, hogy egy alkalmazás megkéri a felhasználót, hogy adjon meg egy címet. Az alkalmazás ezután feltölt egy olyan típusú Addressobjektumot, amely rendelkezik a tulajdonságokkal, StreetCityés ZipCodeCountrya felhasználó által megadott értékekkel. Az alkalmazás panelje négy TextBox vezérlőt tartalmaz, amelyek mindegyike az objektum egyik tulajdonságához kötött adat. Az objektum ellenőrzéséhez használhatja az ValidationRule a-t BindingGroupAddress is. Ha a kötések ugyanabban BindingGroupa módban vesznek részt, akkor meggyőződhet arról, hogy az irányítószám érvényes a cím országára/régiójára.
A tulajdonság BindingGroup beFrameworkElement- vagy FrameworkContentElementbe van állítva. A gyermekelemek ugyanúgy öröklik a BindingGroup szülőelemeket, mint bármely más örökölhető tulajdonságot. Ha az alábbi helyzetek valamelyike bekövetkezik, a rendszer hozzáad egy kötést egy csökkenő elemhez BindingGroup :
A kötés forrása és az DataContext azt tartalmazó BindingGroup elem ugyanaz, és a BindingGroupName tulajdonság nincs beállítva.
A BindingGroupName kötés tulajdonsága megegyezik a Name kötés tulajdonságávalBindingGroup, és nincs explicit módon beállítva .
null
A cím példájában tegyük fel, hogy a DataContextPanel cím típusa a típus Addressobjektumára van állítva. Az egyes TextBox kötések hozzá lesznek adva a BindingGroup panelhez.
Objektumokat vehet fel ValidationRule egy BindingGroup. Az BindingGroup átadás a metódus első paramétere Validate a futtatáskor ValidationRule . Ezen a TryGetValueGetValue(Object, String) módszerrel BindingGroup lekérheti az objektum javasolt értékeit és a Items tulajdonságot a kötések forrásainak lekéréséhez.
A BindingGroup kötés forrásait egyszerre frissíti ahelyett, hogy az egyes kötéseket külön frissítenék. Amikor meghívja az egyik metódust az adatok ellenőrzésére (ValidateWithoutUpdateUpdateSourcesvagyCommitEdit), a példa mindegyikéhez TextBox tartozó kötés érvényesítve lesz, és potenciálisan frissül. Ha egy kötés egy BindingGrouprésze, a kötés forrása csak akkor frissül, ha meghívja UpdateSources vagy CommitEdit bekapcsolja BindingGroupa kötést, kivéve, ha explicit módon állítja be a tulajdonságot UpdateSourceTrigger .
Konstruktorok
| Name | Description |
|---|---|
| BindingGroup() |
Inicializálja a BindingGroup osztály új példányát. |
Tulajdonságok
| Name | Description |
|---|---|
| BindingExpressions |
Olyan objektumgyűjteményt BindingExpression kap, amely információkat tartalmaz az egyes kötésekhez a BindingGroup. |
| CanRestoreValues |
Lekérdezi, hogy a kötésben lévő összes forrás elvetheti-e a függőben lévő módosításokat, és visszaállíthatja-e az eredeti értékeket. |
| DependencyObjectType |
Lekéri a DependencyObjectType példány CLR-típusát körbefuttatót. (Öröklődés forrása DependencyObject) |
| Dispatcher |
Lekérdezi, Dispatcher hogy ez a társítva van-e DispatcherObject . (Öröklődés forrása DispatcherObject) |
| HasValidationError |
Olyan értéket kap, amely jelzi, hogy a BindingGroup szabály nem felel-e meg az érvényességi szabálynak. |
| IsDirty |
Lekéri vagy beállít egy értéket, amely jelzi, hogy a BindingGroup javasolt érték nem a forráshoz lett-e írva. |
| IsSealed |
Olyan értéket kap, amely jelzi, hogy a példány jelenleg zárolva van-e (írásvédett). (Öröklődés forrása DependencyObject) |
| Items |
Lekéri azokat a forrásokat, amelyeket a kötési objektumok használnak a BindingGroupfájlban. |
| Name |
Lekéri vagy beállítja azt a nevet, amely azonosítja a BindingGroupkötésobjektumokat BindingGroupa . |
| NotifyOnValidationError |
Lekérdezi vagy beállítja, hogy az Error esemény akkor következik-e be, amikor egy ValidationRule adott állapot megváltozik. |
| Owner |
Lekéri a hozzárendelt objektumot BindingGroup . |
| SharesProposedValues |
Lekéri vagy beállít egy értéket, amely jelzi, hogy az újra felhasználja-e a BindingGroup forráshoz nem kötött célértékeket. |
| ValidatesOnNotifyDataError |
Lekéri vagy beállít egy értéket, amely jelzi, hogy a NotifyDataErrorValidationRule. |
| ValidationErrors |
Olyan objektumgyűjteményt ValidationError kap, amely érvénytelennek okozta a BindingGroup problémát. |
| ValidationRules |
Lekéri azokat az ValidationRule objektumgyűjteményeket, amelyek ellenőrzik a forrásobjektumokat a BindingGroup. |
Metódusok
| Name | Description |
|---|---|
| BeginEdit() |
Szerkesztési tranzakciót indít el a forráson a következőben: .> |
| CancelEdit() |
Befejezi a szerkesztési tranzakciót, és elveti a függőben lévő módosításokat. |
| CheckAccess() |
Meghatározza, hogy a hívó szál hozzáfér-e ehhez DispatcherObject. (Öröklődés forrása DispatcherObject) |
| ClearValue(DependencyProperty) |
Törli egy tulajdonság helyi értékét. A törölni kívánt tulajdonságot egy DependencyProperty azonosító határozza meg. (Öröklődés forrása DependencyObject) |
| ClearValue(DependencyPropertyKey) |
Törli egy írásvédett tulajdonság helyi értékét. A törölni kívánt tulajdonságot egy DependencyPropertyKey. (Öröklődés forrása DependencyObject) |
| CoerceValue(DependencyProperty) |
A megadott függőségi tulajdonság értékét kényszeríti. Ez úgy érhető el, hogy meghívja a függőségi tulajdonság tulajdonság metaadataiban megadott függvényeket CoerceValueCallback a hívás DependencyObjectsorán. (Öröklődés forrása DependencyObject) |
| CommitEdit() |
Futtatja az ValidationRule összes objektumot, és frissíti a kötési forrásokat, ha az összes érvényesítési szabály sikeres. |
| Equals(Object) |
Meghatározza, hogy a megadott DependencyObject érték megegyezik-e az aktuális DependencyObjectértékével. (Öröklődés forrása DependencyObject) |
| GetHashCode() |
Ehhez lekéri a DependencyObjectkivonatkódot. (Öröklődés forrása DependencyObject) |
| GetLocalValueEnumerator() |
Létrehoz egy speciális enumerátort annak meghatározásához, hogy mely függőségi tulajdonságok rendelkeznek helyileg beállított értékekkel.DependencyObject (Öröklődés forrása DependencyObject) |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| GetValue(DependencyProperty) |
Egy függőségi tulajdonság aktuális tényleges értékét adja vissza az adott példányon DependencyObject. (Öröklődés forrása DependencyObject) |
| GetValue(Object, String) |
A megadott tulajdonság és elem javasolt értékét adja vissza. |
| InvalidateProperty(DependencyProperty) |
Újra kiértékeli a megadott függőségi tulajdonság tényleges értékét. (Öröklődés forrása DependencyObject) |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Akkor hívjuk meg, ha az adott DependencyObject függőségi tulajdonság tényleges értéke frissült. A módosított függőségi tulajdonságot az eseményadatok jelentik. (Öröklődés forrása DependencyObject) |
| ReadLocalValue(DependencyProperty) |
Egy függőségi tulajdonság helyi értékét adja vissza, ha létezik. (Öröklődés forrása DependencyObject) |
| SetCurrentValue(DependencyProperty, Object) |
Beállítja egy függőségi tulajdonság értékét az értékforrás módosítása nélkül. (Öröklődés forrása DependencyObject) |
| SetValue(DependencyProperty, Object) |
Beállítja egy függőségi tulajdonság helyi értékét, amelyet a függőségi tulajdonság azonosítója határoz meg. (Öröklődés forrása DependencyObject) |
| SetValue(DependencyPropertyKey, Object) |
Beállítja egy írásvédett függőség tulajdonság helyi értékét, amelyet a DependencyPropertyKey függőségi tulajdonság azonosítója határoz meg. (Öröklődés forrása DependencyObject) |
| ShouldSerializeProperty(DependencyProperty) |
Olyan értéket ad vissza, amely jelzi, hogy a szerializálási folyamatok szerializálják-e a megadott függőségi tulajdonság értékét. (Öröklődés forrása DependencyObject) |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |
| TryGetValue(Object, String, Object) |
Megkísérli lekérni a megadott tulajdonság és elem javasolt értékét. |
| UpdateSources() |
Futtatja a konvertert a kötésen és a ValidationRule tulajdonságot tartalmazó ValidationStepobjektumokonRawProposedValue, ConvertedProposedValuevagy UpdatedValue menti a célértékeket a forrásobjektumokra, ha az összes érvényesítési szabály sikeres. |
| ValidateWithoutUpdate() |
Futtatja a konvertert a kötésen, valamint azokat az ValidationRule objektumokat, amelyek tulajdonsága ValidationStep a következőre RawProposedValue van állítva: vagy ConvertedProposedValue. |
| VerifyAccess() |
Kényszeríti, hogy a hívószál hozzáférhessen ehhez.DispatcherObject (Öröklődés forrása DispatcherObject) |