BindingGroup Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bir nesneyi doğrulamak için kullanılan bağlamalar ve ValidationRule nesneler koleksiyonunu 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şiklikleri geri döndürmeyi etkinleştirmek için uygulamanın mantığında , CommitEditve CancelEdit çağrılarıBeginEdit.
Kullanıcının girişini almak için bir Validate yönteme çağrı yapar TryGetValue 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 , BindingGroup daha önce açıklandığı gibi öğeyi doğrulayan bir içeren bir ValidationRule içerir. Özelliğindeki ve özelliğindeki Price bağlama nesneleri öğ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 BindingGroupöncesinde ValidationRule ç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 ile BindingGroupilişkili her ValidationRule bir uygulamayı çalıştırmak için çağırırCommitEdit. Her ValidationRule başarılı olursa, CommitEdit değerleri nesnesine kaydeder ve düzenleme işlemini sonlandırır. Başarılı CommitEdit 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.
ItemError
Validation.Error olayı işler ve doğrulama hatası hakkındaki bilgileri kullanıcıya görüntüler. Örnek, ve olayı için StackPanel İptal düğmesinin Click olayını da işlerLoaded.
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öntemini kullanır BindingGroupValidate 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
A BindingGroup , birlikte doğrulanabilen ve güncelleştirilebilen birden çok bağlama arasında 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 nesneyi kullanıcının sağladığı değerlerle doldurur. Uygulama, her biri nesnenin özelliklerinden birine bağlı 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:
Bağlamanın kaynağı ve DataContext öğesini BindingGroup içeren öğesinin aynı nesnesidir ve BindingGroupName özelliği ayarlanmaz.
BindingGroupName Bağlamanın özelliği öğesine eşittir NameBindingGroup ve açıkça olarak olarak
nullayarlanmaz.
Adres örneğinde, öğesinin DataContextPanel türündeki Addressnesnesine ayarlandığını varsayalım. Her TextBox biri için bağlama panele BindingGroup eklenir.
nesnesine BindingGroupnesne eklersinizValidationRule. BindingGroup çalıştırıldığında yönteminin ilk parametresi Validate 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.
A BindingGroup , her bağlamanın ayrı olarak güncelleştirilmesinin yerine bağlamanın kaynaklarını aynı anda güncelleştirir. Verileri (ValidateWithoutUpdate, UpdateSourcesveya CommitEdit) doğrulamak için yöntemlerden birini çağırdığınızda, ö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ıncaya UpdateSourcesCommitEditBindingGroupUpdateSourceTrigger kadar güncelleştirilmez.
Oluşturucular
| Name | Description |
|---|---|
| BindingGroup() |
BindingGroup sınıfının yeni bir örneğini başlatır. |
Özellikler
| Name | Description |
|---|---|
| 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 doğrulama 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 |
bağlama nesnelerini BindingGroupiçinde dahil 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 |
Kaynakta işlenmemiş hedef değerleri yeniden kullanıp kullanmadığını gösteren BindingGroup bir değer alır veya ayarlar. |
| ValidatesOnNotifyDataError |
öğesinin dahil NotifyDataErrorValidationRuleedilip edilmeyeceğini belirten bir değer alır veya ayarlar. |
| ValidationErrors |
geçersiz olmasına neden BindingGroup olan bir nesne koleksiyonu ValidationError alır. |
| ValidationRules |
içindeki BindingGroupkaynak nesneleri doğrulayan bir nesne koleksiyonu ValidationRule alır. |
Yöntemler
| Name | Description |
|---|---|
| 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 CoerceValueCallbackvar olan bağımlılık özelliği için özellik meta verilerinde belirtilen herhangi bir DependencyObject işlevi çağırarak gerçekleştirilir. (Devralındığı yer: DependencyObject) |
| CommitEdit() |
Tüm nesneleri çalıştırır ve tüm ValidationRule doğrulama kuralları başarılı olursa 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 ö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 öğesinin bu örneğindeki bir bağımlılık özelliğinin DependencyObjectgeç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) |
Bunun DependencyObject üzerindeki 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) |
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 tanımlayıcısı tarafından belirtilen salt okunur bağımlılık özelliğinin DependencyPropertyKey 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() |
Bağlamada dönüştürücüsünü ve ValidationRule özelliği , ConvertedProposedValueveya UpdatedValue olarak ayarlanmış RawProposedValuenesneleri ValidationStep çalıştırır ve tüm doğrulama kuralları başarılı olursa hedeflerin değerlerini kaynak nesnelere kaydeder. |
| ValidateWithoutUpdate() |
Bağlama ValidationRule ve özelliği veya ConvertedProposedValueolarak ayarlanmış RawProposedValue nesneleri üzerinde dönüştürücü çalıştırırValidationStep. |
| VerifyAccess() |
Çağıran iş parçacığının bu DispatcherObjectöğesine erişmesini zorlar. (Devralındığı yer: DispatcherObject) |