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 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 BindingGrouptrue
NotifyOnValidationError 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 ValidationRuleValidateDateAndPrice
gö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
, ZipCode
ve Country
özelliklerine sahip Address
tü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:
Bağlamanın kaynağı ve BindingGroup sahip öğenin DataContext aynı nesnedir ve BindingGroupName özelliği ayarlanmaz.
Bağlamanın BindingGroupName özelliği, BindingGroupName eşittir ve açıkça
null
olarak ayarlanmaz.
Adres örneğinde, PanelDataContextAddress
tü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) |