BindingGroup Sınıf

Tanım

Bir nesneyi doğrulamak için kullanılan bağlamalardan ve ValidationRule nesnelerden oluşan bir koleksiyon içerir.

public ref class BindingGroup : System::Windows::DependencyObject
public class BindingGroup : System.Windows.DependencyObject
type BindingGroup = class
    inherit DependencyObject
Public Class BindingGroup
Inherits DependencyObject
Devralma

Örnekler

Aşağıdaki örnekler, kullanıcıdan bir öğenin açıklamasını ve fiyatını ve teklifin süresinin dolacağı tarihi girmesini isteyen bir uygulama oluşturur. Uygulama, formun altındaki öğenin geçerli bilgilerini görüntüler. Kullanıcı değişiklikleri gönderebilir veya iptal edebilir.

Uygulama bu davranışı elde etmek için aşağıdakileri yapar.

  • bir BindingGroup oluşturur ve uygulamanın kullanıcı arabirimini (UI) oluşturduğunda kökünü StackPanel ekler.

  • Değişikliklerin geri döndürülebilmesi için uygulamanın mantığında , CommitEditve CancelEdit çağrılarıBeginEdit.

  • Kullanıcının girişini almak için yöntemini Validate çağırır TryGetValue ve ardından en az yedi gün boyunca 100 doların üzerindeki bir öğenin kullanılabilir olup olmadığını denetler.

Aşağıdaki örnek, uygulamanın kullanıcı arabirimini (UI) oluşturur. KökStackPanel, daha önce açıklandığı gibi öğeyi doğrulayan bir içeren öğesine ValidationRule sahiptirBindingGroup. özelliğindeki Price bağlama nesneleri ve özelliği öğesinin OfferExpiresBindingGroup bir parçası olur ve her bağlamanın, sırasıyla fiyat ve tarihin geçerli değerler olduğundan emin olmak için bir ValidationRule değeri vardır. Tek tek özelliklerin geçerlilik kuralları üzerinde öncesinde ValidationRule çalıştırılır 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>

Aşağıdaki örnekte uygulamanın olay işleyicileri gösterilmektedir. Kullanıcı Gönder düğmesine tıkladığında, uygulama ile BindingGroupilişkili her ValidationRule bir uygulamayı çalıştırmak için öğesini çağırırCommitEdit. Her ValidationRule başarılı olursa, CommitEdit değerleri nesnesine kaydeder ve düzenleme işlemini sonlandırır. CommitEdit Başarılı olursa, uygulama başka bir düzenleme işlemi başlatır. başarısız ValidationRule olduğunda, Validation.Error uygulama üzerinde BindingGroup olarak ayarlandığından NotifyOnValidationErrortrue (önceki örnekte) olay gerçekleşir. ItemErrorValidation.Error olayı işler ve kullanıcıya doğrulama hatası hakkındaki bilgileri görüntüler. Örnek ayrıca olayı ve İptal düğmesinin Click olayını da işler LoadedStackPanel.


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

Aşağıdaki örnek, ilk örnekte öğesine BindingGroup eklenen özel ValidationRuleValidateDateAndPriceöğesini gösterir. , ValidationRule kullanıcının forma girdiği değerleri almak için yönteminde Validate öğesini kullanır BindingGroup ve bir öğenin 100 doların üzerinde olması durumunda en az yedi gün boyunca kullanılabilir olacağını denetler.

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

Açıklamalar

, BindingGroup birden çok bağlama arasında birlikte doğrulanabilen ve güncelleştirilebilen bir ilişki oluşturur. Örneğin, bir uygulamanın kullanıcıdan bir adres girmesini istediğini varsayalım. Uygulama daha sonra , , CityZipCodeve Countryözelliklerine Streetsahip olan türünde Addressbir nesnesini kullanıcının sağladığı değerlerle doldurur. Uygulama, her biri nesnenin özelliklerinden birine bağlı veriler olan dört TextBox denetim içeren bir panele sahiptir. nesnesini doğrulamak için içinde kullanabilirsiniz ValidationRuleBindingGroup.Address Bağlamalar aynı BindingGroupiçinde yer alırsa, posta kodunun adresin ülkesi/bölgesi için geçerli olduğundan emin olabilirsiniz.

özelliğini veya FrameworkContentElementüzerinde FrameworkElement ayarlarsınızBindingGroup. Alt öğeler, diğer devralınabilir özelliklerde olduğu gibi üst öğelerinden öğesini devralır BindingGroup . Aşağıdaki durumlardan biri oluşursa öğesine alt öğedeki bir BindingGroup bağlama eklenir:

Adres örneğinde, öğesinin DataContextPanel türündeki Addressnesnesine ayarlandığını varsayalım. Her TextBox birinin bağlaması panele BindingGroup eklenir.

nesnesine BindingGroupnesneler eklersinizValidationRule. BindingGroup çalıştırıldığında yönteminin Validate ilk parametresi olarak geçirilirValidationRule. Nesnenin TryGetValue önerilen değerlerini almak için veya GetValue(Object, String) yöntemini BindingGroup ve Items bağlamaların kaynaklarını almak için özelliğini kullanabilirsiniz.

Bir BindingGroup , her bağlamanın ayrı olarak güncelleştiriliyor olması yerine bağlamanın kaynaklarını aynı anda güncelleştirir. Verileri (ValidateWithoutUpdate, veya CommitEdit) doğrulamak için yöntemlerden birini çağırdığınızda, UpdateSourcesörnekteki her TextBox biri için bağlama doğrulanır ve potansiyel olarak güncelleştirilir. Bağlama bir BindingGroupöğesinin parçası olduğunda, özelliğini açıkça ayarlamadığınız sürece bağlamanın kaynağı veya çağrısı BindingGroupUpdateSourcesCommitEdit yapılana UpdateSourceTrigger kadar güncelleştirilmez.

Oluşturucular

BindingGroup()

BindingGroup sınıfının yeni bir örneğini başlatır.

Özellikler

BindingExpressions

içindeki BindingGroupher Bağlama için bilgi içeren bir nesne koleksiyonu BindingExpression alır.

CanRestoreValues

Bağlamadaki her kaynağın bekleyen değişiklikleri atıp atamayacağını ve özgün değerleri geri yükleyip geri yükleyemeyeceğini alır.

DependencyObjectType

DependencyObjectType Bu örneğin CLR türünü sarmalayan öğesini alır.

(Devralındığı yer: DependencyObject)
Dispatcher

Dispatcher Bunun DispatcherObject ilişkili olduğu öğesini alır.

(Devralındığı yer: DispatcherObject)
HasValidationError

öğesinin başarısız bir geçerlilik kuralı olup olmadığını BindingGroup gösteren bir değer alır.

IsDirty

öğesinin kaynağa yazılmayan önerilen bir değer içerip BindingGroup içermediğini belirten bir değer alır veya ayarlar.

IsSealed

Bu örneğin şu anda korumalı (salt okunur) olup olmadığını gösteren bir değer alır.

(Devralındığı yer: DependencyObject)
Items

içindeki Bağlama nesneleri BindingGrouptarafından kullanılan kaynakları alır.

Name

içinde Bağlama nesnelerini BindingGroupdahil etmek ve dışlamak için kullanılabilecek öğesini tanımlayan BindingGroupadı alır veya ayarlar.

NotifyOnValidationError

Bir durumun değiştiğinde Error olayın gerçekleşip gerçekleşmediğini ValidationRule alır veya ayarlar.

Owner

Bunun BindingGroup atandığı nesneyi alır.

SharesProposedValues

Kaynağa kaydedilmemiş hedef değerleri yeniden kullanıp kullanmadığını belirten BindingGroup bir değer alır veya ayarlar.

ValidatesOnNotifyDataError

öğesinin eklenip eklenmeyeceğini NotifyDataErrorValidationRulebelirten bir değer alır veya ayarlar.

ValidationErrors

geçersiz olmasına neden BindingGroup olan nesne koleksiyonunu ValidationError alır.

ValidationRules

içindeki BindingGroupkaynak nesneleri doğrulayan bir nesne koleksiyonu ValidationRule alır.

Yöntemler

BeginEdit()

içindeki kaynaklarda BindingGroupdüzenleme işlemi başlatır.

CancelEdit()

Düzenleme işlemini sonlandırır ve bekleyen değişiklikleri atar.

CheckAccess()

Çağıran iş parçacığının bu DispatcherObjectöğesine erişimi olup olmadığını belirler.

(Devralındığı yer: DispatcherObject)
ClearValue(DependencyProperty)

Bir özelliğin yerel değerini temizler. Temizlenecek özellik bir DependencyProperty tanımlayıcı tarafından belirtilir.

(Devralındığı yer: DependencyObject)
ClearValue(DependencyPropertyKey)

Salt okunur özelliğin yerel değerini temizler. Temizlenecek özellik tarafından DependencyPropertyKeybelirtilir.

(Devralındığı yer: DependencyObject)
CoerceValue(DependencyProperty)

Belirtilen bağımlılık özelliğinin değerini zorlama. Bu, çağrısında var olan bağımlılık özelliği için özellik meta verilerinde belirtilen herhangi bir CoerceValueCallback işlevi çağırarak DependencyObjectgerçekleştirilir.

(Devralındığı yer: DependencyObject)
CommitEdit()

Tüm doğrulama kuralları başarılı olursa tüm ValidationRule nesneleri çalıştırır ve bağlama kaynaklarını güncelleştirir.

Equals(Object)

Sağlanan DependencyObject öğesinin geçerli DependencyObjectile eşdeğer olup olmadığını belirler.

(Devralındığı yer: DependencyObject)
GetHashCode()

Bu DependencyObjectiçin bir karma kodu alır.

(Devralındığı yer: DependencyObject)
GetLocalValueEnumerator()

Hangi bağımlılık özelliklerinin bu DependencyObjectüzerinde yerel olarak ayarlı değerlere sahip olduğunu belirlemek için özelleştirilmiş bir numaralandırıcı oluşturur.

(Devralındığı yer: DependencyObject)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
GetValue(DependencyProperty)

Bir öğesinin bu örneğindeki bağımlılık özelliğinin DependencyObjectgeçerli geçerli değerini döndürür.

(Devralındığı yer: DependencyObject)
GetValue(Object, String)

Belirtilen özellik ve öğe için önerilen değeri döndürür.

InvalidateProperty(DependencyProperty)

Belirtilen bağımlılık özelliği için geçerli değeri yeniden değerlendirir.

(Devralındığı yer: DependencyObject)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Bu DependencyObject konudaki herhangi bir bağımlılık özelliğinin etkin değeri her güncelleştirildiğinde çağrılır. Değiştirilen belirli bağımlılık özelliği olay verilerinde bildirilir.

(Devralındığı yer: DependencyObject)
ReadLocalValue(DependencyProperty)

Varsa, bağımlılık özelliğinin yerel değerini döndürür.

(Devralındığı yer: DependencyObject)
SetCurrentValue(DependencyProperty, Object)

Bağımlılık özelliğinin değerini, değer kaynağını değiştirmeden ayarlar.

(Devralındığı yer: DependencyObject)
SetValue(DependencyProperty, Object)

Bağımlılık özelliği tanımlayıcısı tarafından belirtilen bağımlılık özelliğinin yerel değerini ayarlar.

(Devralındığı yer: DependencyObject)
SetValue(DependencyPropertyKey, Object)

Salt okunur bağımlılık özelliğinin, bağımlılık özelliğinin DependencyPropertyKey tanımlayıcısı tarafından belirtilen yerel değerini ayarlar.

(Devralındığı yer: DependencyObject)
ShouldSerializeProperty(DependencyProperty)

Serileştirme işlemlerinin sağlanan bağımlılık özelliği için değeri serileştirmesi gerekip gerekmediğini belirten bir değer döndürür.

(Devralındığı yer: DependencyObject)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)
TryGetValue(Object, String, Object)

Belirtilen özellik ve öğe için önerilen değeri almaya çalışır.

UpdateSources()

Dönüştürücüsü bağlamada ve ValidationRule özelliği , ConvertedProposedValueveya UpdatedValue olarak ayarlanmış RawProposedValuenesneler ValidationStep üzerinde çalıştırır ve tüm doğrulama kuralları başarılı olursa hedeflerin değerlerini kaynak nesnelere kaydeder.

ValidateWithoutUpdate()

dönüştürücüsünü bağlamada ve ValidationRule özelliği veya ConvertedProposedValueolarak ayarlanmış RawProposedValue olan nesnelerde ValidationStep çalıştırır.

VerifyAccess()

Çağıran iş parçacığının bu DispatcherObjectöğesine erişmesini zorlar.

(Devralındığı yer: DispatcherObject)

Şunlara uygulanır