Aracılığıyla paylaş


BindingGroup Sınıf

Tanım

Bir nesneyi doğrulamak için kullanılan bağlamalar ve ValidationRule nesneleri koleksiyonu 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 StackPanel ekler.

  • Değişiklikleri geri almak için uygulamanın mantığında BeginEdit, CommitEditve CancelEdit çağırır.

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

Aşağıdaki örnek, uygulamanın kullanıcı arabirimini (UI) oluşturur. Kök StackPanel, daha önce açıklandığı gibi öğeyi doğrulayan bir ValidationRule içeren bir BindingGroup vardır. Price özelliğindeki ve OfferExpires özelliğindeki bağlama nesneleri BindingGroup 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 vardır. Tek tek özelliklerin doğrulama kuralları, BindingGroupüzerindeki ValidationRule önce çalışır.

<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 BindingGroupile ilişkili her ValidationRule çalıştırmak için CommitEdit çağırır. 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. bir ValidationRule başarısız olduğunda, Validation.Error olayı uygulamanın BindingGrouptrueNotifyOnValidationError ayarlaması nedeniyle oluşur (önceki örnekte). ItemError Validation.Error olayını işler ve doğrulama hatası hakkındaki bilgileri kullanıcıya görüntüler. Örnek ayrıca StackPanel için Loaded olayını ve İptal düğmesinin Click olayını işler.


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 örnekte, ilk örnekte BindingGroup eklenen özel ValidationRuleValidateDateAndPricegösterilmektedir. ValidationRule, kullanıcının forma girdiği değerleri almak için Validate yöntemindeki BindingGroup kullanır 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, Street, City, ZipCodeve Countryözelliklerine sahip Addresstüründe bir nesneyi kullanıcının sağladığı değerlerle doldurur. Uygulama, her biri nesnenin özelliklerinden birine bağlı olan dört TextBox denetimi içeren bir panele sahiptir. Address nesnesini doğrulamak için BindingGroup bir ValidationRule kullanabilirsiniz. Bağlamalar aynı BindingGroupkatılıyorsa, posta kodunun adresin ülkesi/bölgesi için geçerli olduğundan emin olabilirsiniz.

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

Adres örneğinde, PanelDataContextAddresstüründeki nesneye ayarlandığını varsayalım. Her TextBox bağlaması panelin BindingGroup eklenir.

BindingGroup ValidationRule nesneleri eklersiniz. BindingGroup, ValidationRule çalıştırıldığında Validate yönteminin ilk parametresi olarak geçirilir. Nesnenin önerilen değerlerini almak için bu BindingGroupTryGetValue veya GetValue(Object, String) yöntemini ve bağlamaların kaynaklarını almak için Items özelliğini kullanabilirsiniz.

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

Oluşturucular

BindingGroup()

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

Özellikler

BindingExpressions

BindingGroupher Bağlama için bilgi içeren BindingExpression nesneleri koleksiyonunu 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

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

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

Bu DispatcherObject ilişkilendirilen Dispatcher alır.

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

BindingGroup bir doğrulama kuralının başarısız olup olmadığını gösteren bir değer alır.

IsDirty

BindingGroup kaynağa yazılmayan önerilen bir değer içerip içermediğini gösteren 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

BindingGroupBağlama nesneleri tarafından kullanılan kaynakları alır.

Name

BindingGroupBağlama nesnelerini dahil etmek ve dışlamak için kullanılabilecek BindingGrouptanımlayan adı alır veya ayarlar.

NotifyOnValidationError

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

Owner

Bu BindingGroup atandığı nesneyi alır.

SharesProposedValues

BindingGroup kaynağa kaydedilmemiş hedef değerleri yeniden kullanıp kullanmadığını gösteren bir değer alır veya ayarlar.

ValidatesOnNotifyDataError

NotifyDataErrorValidationRuleeklenip eklenmeyeceğini belirten bir değer alır veya ayarlar.

ValidationErrors

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

ValidationRules

BindingGroupkaynak nesnelerini doğrulayan ValidationRule nesneleri koleksiyonunu alır.

Yöntemler

BeginEdit()

BindingGroupkaynaklarda dü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 DispatcherObjecteriş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ısı tarafından belirtilir.

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

Salt okunur özelliğin yerel değerini temizler. Temizlenecek özellik bir DependencyPropertyKeytarafından belirtilir.

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

Belirtilen bağımlılık özelliğinin değerini zorlama. Bu, bağımlılık özelliği için özellik meta verilerinde belirtilen herhangi bir CoerceValueCallback işlevi çağrılarak DependencyObject.

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

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

Equals(Object)

Sağlanan bir DependencyObject geçerli DependencyObjecteşdeğer olup olmadığını belirler.

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

Bu DependencyObjectiçin bir karma kodu alır.

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

Bu DependencyObjecthangi bağımlılık özelliklerinin yerel olarak ayarlandığını belirlemek için özel bir numaralandırıcı oluşturur.

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

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

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

bir DependencyObjectbu örneğindeki bağımlılık özelliğinin geçerli etkin 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 Objectbasit bir kopyasını oluşturur.

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

Bu DependencyObject herhangi bir bağımlılık özelliğinin geçerli değeri 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)

Bir 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 bir bağımlılık özelliğinin yerel değerini ayarlar.

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

Bağımlılık özelliğinin DependencyPropertyKey tanımlayıcısı tarafından belirtilen salt okunur bağımlılık özelliğinin 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 gösteren bir değer döndürür.

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

Geçerli nesneyi temsil eden bir dize 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()

ValidationStep özelliği RawProposedValue, ConvertedProposedValueveya UpdatedValue olarak ayarlanmış bağlama ve ValidationRule nesneleri üzerinde dönüştürücü ç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 ValidationStep özelliği RawProposedValue veya ConvertedProposedValueolarak ayarlanmış ValidationRule nesneleri üzerinde çalıştırır.

VerifyAccess()

Çağıran iş parçacığının bu DispatcherObjecterişmesini zorlar.

(Devralındığı yer: DispatcherObject)

Şunlara uygulanır