BindingGroup Osztály

Definíció

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 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)

A következőre érvényes: