BindingGroup クラス


あるオブジェクトの検証に使用されるバインディングと ValidationRule オブジェクトのコレクションを格納します。Contains a collection of bindings and ValidationRule objects that are used to validate an object.

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

次の例では、項目の説明と価格、およびプランの有効期限が切れる日付を入力するようにユーザーに求めるアプリケーションを作成します。The following examples create an application that prompts the user to enter the description and price of an item and the date that the offer expires. アプリケーションによって、フォームの下の項目の現在の情報が表示されます。The application displays the current information for the item below the form. ユーザーは、変更を送信またはキャンセルできます。The user can submit or cancel the changes.

この動作を実現するために、アプリケーションは次の処理を実行します。The application does the following to achieve this behavior.

  • を作成 BindingGroup し、 StackPanel アプリケーションのを作成するときにルートを追加し ユーザー インターフェイス (UI)user interface (UI) ます。Creates a BindingGroup and adds it the root StackPanel when it creates the ユーザー インターフェイス (UI)user interface (UI) of the application.

  • BeginEdit CommitEdit アプリケーションのロジックで、、およびを呼び出して、 CancelEdit 変更をロールバックできるようにします。Calls BeginEdit, CommitEdit, and CancelEdit in the application's logic to enable rolling back changes.

  • は、メソッドを呼び出し TryGetValue Validate てユーザーの入力を取得し、100ドル以上の項目が7日以上使用可能であることを確認します。Calls TryGetValue in a Validate method to get the user's input and then check that an item over 100 dollars is available for at least seven days.

次の例では、アプリケーションのを作成し ユーザー インターフェイス (UI)user interface (UI) ます。The following example creates the ユーザー インターフェイス (UI)user interface (UI) of the application. ルートには、 StackPanel BindingGroup 前に説明したように、項目を検証するを含むがあり ValidationRule ます。The root StackPanel has a BindingGroup that contains a ValidationRule that validates the item, as described previously. プロパティとプロパティのバインドオブジェクトは Price OfferExpires 、の一部になり、 BindingGroup 各バインドには、 ValidationRule それぞれ価格と日付が有効な値であることを確認するためのがあります。The binding objects on the Price property and the OfferExpires property become part of the BindingGroup and each binding has a ValidationRule to make sure that price and date, respectively, are valid values. 個々のプロパティの検証規則は、のの前に実行され ValidationRule BindingGroup ます。The validation rules for the individual properties run before the ValidationRule on the BindingGroup.

<StackPanel Name="stackPanel1"  Margin="10" Width="250"

    <Style TargetType="HeaderedContentControl">
      <Setter Property="Margin" Value="2"/>
      <Setter Property="Focusable" Value="False"/>
      <Setter Property="Template">
          <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"/>


    <Style TargetType="Button">
      <Setter Property="Width" Value="100"/>
      <Setter Property="Margin" Value="10,15,15,15"/>


    <BindingGroup NotifyOnValidationError="True">
        <src:ValidateDateAndPrice ValidationStep="ConvertedProposedValue" />
  <TextBlock FontSize="14" Text="Enter an item for sale"/>
  <HeaderedContentControl Header="Description">
    <TextBox Width="150" Text="{Binding Path=Description, Mode=TwoWay}"/>
  <HeaderedContentControl Header="Price">
    <TextBox Name="priceField"  Width="150">
        <Binding Path="Price" Mode="TwoWay" >
  <HeaderedContentControl Header="Date Offer Ends">
    <TextBox Name="dateField" Width="150" >
        <Binding Path="OfferExpires" StringFormat="d" >
  <StackPanel Orientation="Horizontal">
    <Button IsDefault="True" Click="Submit_Click">_Submit</Button>
    <Button IsCancel="True" Click="Cancel_Click">_Cancel</Button>
  <HeaderedContentControl Header="Description">
    <TextBlock Width="150" Text="{Binding Path=Description}"/>
  <HeaderedContentControl Header="Price">
    <TextBlock Width="150" Text="{Binding Path=Price, StringFormat=c}"/>
  <HeaderedContentControl Header="Date Offer Ends">
    <TextBlock Width="150" Text="{Binding Path=OfferExpires, StringFormat=d}"/>

次の例は、アプリケーションのイベントハンドラーを示しています。The following example shows the event handlers for the application. ユーザーが [送信] ボタンをクリックすると、アプリケーションはを呼び出して CommitEdit 、に関連付けられている各を実行し ValidationRule BindingGroup ます。When the user clicks the Submit button, the application calls CommitEdit to run each ValidationRule that is associated with the BindingGroup. ValidationRule 成功 CommitEdit すると、はオブジェクトに値を保存し、編集トランザクションを終了します。If each ValidationRule succeeds, CommitEdit saves the values to the object and ends the edit transaction. が成功した場合 CommitEdit 、アプリケーションは別の編集トランザクションを開始します。If CommitEdit is successful, the application begins another edit transaction. が失敗した場合、 ValidationRule Validation.Error イベントは、アプリケーションが NotifyOnValidationError true BindingGroup (前の例では) でに設定されているために発生します。When a ValidationRule fails, the Validation.Error event occurs because the application set NotifyOnValidationError to true on the BindingGroup (in the previous example). ItemError イベントを処理 Validation.Error し、検証エラーに関する情報をユーザーに表示します。ItemError handles the Validation.Error event and displays information about the validation error to the user. また、この例では Loaded 、のイベント StackPanelClick [キャンセル ] ボタンのイベントも処理します。The example also handles the Loaded event for the StackPanel and the Click event for the Cancel button.

private void Submit_Click(object sender, RoutedEventArgs e)
    if (stackPanel1.BindingGroup.CommitEdit())
        MessageBox.Show("Item submitted");

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

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.

private void Cancel_Click(object sender, RoutedEventArgs e)
    // Cancel the pending changes and begin a new edit transaction.

Private Sub Submit_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If stackPanel1.BindingGroup.CommitEdit() Then
        MessageBox.Show("Item submitted")
    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

    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.
End Sub

Private Sub Cancel_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    ' Cancel the pending changes and begin a new edit transaction.
End Sub

次の例は、最初の例のに ValidationRule ValidateDateAndPrice 追加されたカスタムを示して BindingGroup います。The following example shows the custom ValidationRule ValidateDateAndPrice, which was added to the BindingGroup in the first example. は、 ValidationRule メソッド内のを使用して、 BindingGroup ユーザーが Validate フォームに入力した値を取得し、項目が100ドルを超えている場合は少なくとも7日間使用できることを確認します。The ValidationRule uses the BindingGroup in its Validate method to get the values the user entered into the form, and checks that if an item is over 100 dollars, it will be available for at least seven days.

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


では、 BindingGroup 複数のバインド間のリレーションシップが作成されます。これは、まとめて検証および更新できます。A BindingGroup creates a relationship between multiple bindings, which can be validated and updated together. たとえば、ユーザーにアドレスの入力を求めるアプリケーションがあるとします。For example, suppose that an application prompts the user to enter an address. 次に、アプリケーションは、、、、、およびというプロパティを持つ型のオブジェクトを、 Address Street ユーザーが指定し City ZipCode Country た値に設定します。The application then populates an object of type Address, which has the properties, Street, City, ZipCode, and Country, with the values that the user provided. このアプリケーションには、4つのコントロールが含まれているパネルがあり TextBox 、それぞれがオブジェクトのプロパティの1つにバインドされています。The application has a panel that contains four TextBox controls, each of which is data bound to one of the object's properties. でを使用して、オブジェクトを検証することができ ValidationRule BindingGroup Address ます。You can use a ValidationRule in a BindingGroup to validate the Address object. バインドが同じに参加している場合は、 BindingGroup 郵便番号が住所の国/地域に対して有効であることを確認できます。If the bindings participate in the same BindingGroup, you can ensure that the zip-code is valid for the country/region of the address.

BindingGroupまたはでプロパティを設定し FrameworkElement FrameworkContentElement ます。You set the BindingGroup property on FrameworkElement or FrameworkContentElement. 子要素は、 BindingGroup 他の継承可能なプロパティと同様に、親要素からを継承します。Child elements inherit the BindingGroup from their parent elements, just as with any other inheritable property. BindingGroup次のいずれかの状況が発生した場合、子孫要素のバインドがに追加されます。A binding on a descendent element is added to a BindingGroup if one of the following situations occurs:

アドレスの例で DataContext は、のが Panel 型のオブジェクトに設定されているとし Address ます。In the example of the address, suppose that the DataContext of the Panel is set to the object of type Address. 各のバインド TextBox がパネルのに追加され BindingGroup ます。The binding for each TextBox is added to the BindingGroup of the panel.

ValidationRuleオブジェクトをに追加し BindingGroup ます。You add ValidationRule objects to a BindingGroup. BindingGroup Validate 、の実行時に、メソッドの最初のパラメーターとして渡され ValidationRule ます。The BindingGroup is passed as the first parameter of the Validate method when the ValidationRule runs. それに対してメソッドまたはメソッドを使用して、オブジェクトの提案された値を取得し、プロパティを使用して TryGetValue GetValue(Object, String) BindingGroup Items バインディングのソースを取得できます。You can use the TryGetValue or GetValue(Object, String) method on that BindingGroup to get the proposed values of the object, and the Items property to get the sources of the bindings.

は、 BindingGroup 各バインドが個別に更新されるのではなく、バインドのソースを同時に更新します。A BindingGroup updates the sources of the binding at the same time instead of each binding being updated separately. いずれかのメソッドを呼び出してデータを検証すると ( ValidateWithoutUpdateUpdateSources 、または CommitEdit )、この例の各のバインド TextBox が検証され、更新される可能性があります。When you call one of the methods to validate the data (ValidateWithoutUpdate, UpdateSources, or CommitEdit), the binding for each TextBox in the example is validated and potentially updated. バインディングがの一部である場合 BindingGroupUpdateSources CommitEdit BindingGroup プロパティを明示的に設定しない限り、バインディングのソースは、でまたはを呼び出すまで更新されません UpdateSourceTriggerWhen a binding is part of a BindingGroup, the source of the binding is not updated until you call UpdateSources or CommitEdit on the BindingGroup, unless you explicitly set the UpdateSourceTrigger property.



BindingGroup クラスの新しいインスタンスを初期化します。Initializes a new instance of the BindingGroup class.



BindingExpression 内の各バインディングに対する情報を格納する BindingGroup オブジェクトのコレクションを取得します。Gets a collection of BindingExpression objects that contains information for each Binding in the BindingGroup.


バインディングの各ソースが保留中の変更を破棄して元の値を復元できるかどうかを取得します。Gets whether each source in the binding can discard pending changes and restore the original values.


このインスタンスの CLRCLR 型をラップする DependencyObjectType を取得します。Gets the DependencyObjectType that wraps the CLRCLR type of this instance.

(継承元 DependencyObject)

この Dispatcher が関連付けられている DispatcherObject を取得します。Gets the Dispatcher this DispatcherObject is associated with.

(継承元 DispatcherObject)

BindingGroup のバインディングに失敗した検証規則があるかどうかを示す値を取得します。Gets a value that indicates whether the BindingGroup has a failed validation rule.


BindingGroup がソースに書き込まれていない提案された値を含んでいるかどうかを示す値を取得または設定します。Gets or sets a value that indicates whether the BindingGroup contains a proposed value that has not been written to the source.


このインスタンスが現在シールされている (読み取り専用である) かどうかを示す値を取得します。Gets a value that indicates whether this instance is currently sealed (read-only).

(継承元 DependencyObject)

BindingGroup 内のバインディング オブジェクトが使用するソースを取得します。Gets the sources that are used by the Binding objects in the BindingGroup.


BindingGroup を示す名前を取得または設定します。BindingGroup ではこの名前を使用して、バインディング オブジェクトを含めたり除外したりできます。Gets or sets the name that identifies the BindingGroup, which can be used to include and exclude Binding objects in the BindingGroup.


Error の状態が変化したときに ValidationRule イベントが発生するかどうかを取得または設定します。Gets or sets whether the Error event occurs when the state of a ValidationRule changes.


この BindingGroup が割り当てられているオブジェクトを取得します。Gets the object that this BindingGroup is assigned to.


BindingGroup がソースにコミットされていないターゲット値を再利用するかどうかを示す値を取得または設定します。Gets or sets a value that indicates whether the BindingGroup reuses target values that have not been committed to the source.


NotifyDataErrorValidationRule を含めるかどうかを示す値を取得または設定します。Gets or sets a value that indicates whether to include the NotifyDataErrorValidationRule.


ValidationError を無効にした BindingGroup オブジェクトのコレクションを取得します。Gets a collection of ValidationError objects that caused the BindingGroup to be invalid.


ValidationRule 内のソース オブジェクトを検証する BindingGroup オブジェクトのコレクションを取得します。Gets a collection of ValidationRule objects that validate the source objects in the BindingGroup.



BindingGroup 内のソースに対する編集トランザクションを開始します。Begins an edit transaction on the sources in the BindingGroup.


編集トランザクションを終了し、保留中の変更を破棄します。Ends the edit transaction and discards the pending changes.


呼び出し元のスレッドがこの DispatcherObject にアクセスできるかどうかを確認します。Determines whether the calling thread has access to this DispatcherObject.

(継承元 DispatcherObject)

プロパティのローカル値をクリアします。Clears the local value of a property. クリアするプロパティは DependencyProperty 識別子で指定されます。The property to be cleared is specified by a DependencyProperty identifier.

(継承元 DependencyObject)

読み取り専用プロパティのローカル値を消去します。Clears the local value of a read-only property. 消去するプロパティは、DependencyPropertyKey で指定します。The property to be cleared is specified by a DependencyPropertyKey.

(継承元 DependencyObject)

指定した依存関係プロパティの値を強制します。Coerces the value of the specified dependency property. これは、呼び出し元の DependencyObject の依存関係プロパティのプロパティ メタデータで指定されている CoerceValueCallback 関数を呼び出すことによって実現されます。This is accomplished by invoking any CoerceValueCallback function specified in property metadata for the dependency property as it exists on the calling DependencyObject.

(継承元 DependencyObject)

すべての ValidationRule オブジェクトを実行し、すべての検証ルールが成功した場合はバインディング ソースを更新します。Runs all the ValidationRule objects and updates the binding sources if all validation rules succeed.


指定した DependencyObject が現在の DependencyObject と等しいかどうかを判断します。Determines whether a provided DependencyObject is equivalent to the current DependencyObject.

(継承元 DependencyObject)

この DependencyObject のハッシュ コードを取得します。Gets a hash code for this DependencyObject.

(継承元 DependencyObject)

どの依存関係プロパティがこの DependencyObject 上にローカルに設定された値を持つかを確認するための、専用の列挙子を作成します。Creates a specialized enumerator for determining which dependency properties have locally set values on this DependencyObject.

(継承元 DependencyObject)

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)

DependencyObject のこのインスタンスにある依存関係プロパティの現在の有効値を返します。Returns the current effective value of a dependency property on this instance of a DependencyObject.

(継承元 DependencyObject)
GetValue(Object, String)

指定されているプロパティと項目に対して提示されている値を返します。Returns the proposed value for the specified property and item.


指定した依存関係プロパティの有効値を再評価します。Re-evaluates the effective value for the specified dependency property.

(継承元 DependencyObject)

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)

この DependencyObject の依存関係プロパティの有効値が更新された場合に必ず呼び出されます。Invoked whenever the effective value of any dependency property on this DependencyObject has been updated. 変更された特定の依存関係プロパティは、イベント データで報告されます。The specific dependency property that changed is reported in the event data.

(継承元 DependencyObject)

ローカルの依存関係プロパティの値を返します (存在する場合)。Returns the local value of a dependency property, if it exists.

(継承元 DependencyObject)
SetCurrentValue(DependencyProperty, Object)

依存関係プロパティ値のソースを変更せずにその値を設定します。Sets the value of a dependency property without changing its value source.

(継承元 DependencyObject)
SetValue(DependencyProperty, Object)

依存関係プロパティ識別子を指定して、該当する依存関係プロパティのローカル値を設定します。Sets the local value of a dependency property, specified by its dependency property identifier.

(継承元 DependencyObject)
SetValue(DependencyPropertyKey, Object)

依存関係プロパティの DependencyPropertyKey 識別子で指定した読み取り専用の依存関係プロパティのローカル値を設定します。Sets the local value of a read-only dependency property, specified by the DependencyPropertyKey identifier of the dependency property.

(継承元 DependencyObject)

シリアル化プロセスが、指定された依存関係プロパティの値をシリアル化する必要があるかどうかを示す値を返します。Returns a value that indicates whether serialization processes should serialize the value for the provided dependency property.

(継承元 DependencyObject)

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(継承元 Object)
TryGetValue(Object, String, Object)

指定されているプロパティと項目に対して提示されている値の取得を試みます。Attempts to get the proposed value for the specified property and item.


バインディングおよび ValidationRule プロパティが ValidationStepRawProposedValue、または ConvertedProposedValue に設定されている UpdatedValue オブジェクトに対してコンバーターを実行し、すべての検証ルールが成功した場合は、ターゲットの値をソース オブジェクトに保存します。Runs the converter on the binding and the ValidationRule objects that have the ValidationStep property set to RawProposedValue, ConvertedProposedValue, or UpdatedValue and saves the values of the targets to the source objects if all the validation rules succeed.


バインディングおよび ValidationRule プロパティが ValidationStep または RawProposedValue に設定されている ConvertedProposedValue オブジェクトに対し、コンバーターを実行します。Runs the converter on the binding and the ValidationRule objects that have the ValidationStep property set to RawProposedValue or ConvertedProposedValue.


呼び出し元のスレッドがこの DispatcherObject にアクセスできるように強制します。Enforces that the calling thread has access to this DispatcherObject.

(継承元 DispatcherObject)