ItemsControl.ItemBindingGroup プロパティ

定義

BindingGroup の各項目にコピーされる ItemsControl を取得または設定します。Gets or sets the BindingGroup that is copied to each item in the ItemsControl.

public:
 property System::Windows::Data::BindingGroup ^ ItemBindingGroup { System::Windows::Data::BindingGroup ^ get(); void set(System::Windows::Data::BindingGroup ^ value); };
[System.ComponentModel.Bindable(true)]
public System.Windows.Data.BindingGroup ItemBindingGroup { get; set; }
member this.ItemBindingGroup : System.Windows.Data.BindingGroup with get, set
Public Property ItemBindingGroup As BindingGroup

プロパティ値

BindingGroup の各項目にコピーされる ItemsControlThe BindingGroup that is copied to each item in the ItemsControl.

属性

次の例は、複数の顧客を入力するようにユーザーに要求し、販売担当者を各顧客に割り当てて、営業担当者と顧客が同じリージョンに属していることを確認するアプリケーションの一部です。The following example is part of an application that prompts the user to enter multiple customers and assign a sales representative to each customer, and then checks that the sales representative and the customer belong to the same region. この例では、ValidationRuleAreasMatchによって各項目が検証されるように、ItemsControlItemBindingGroup を設定します。The example sets the ItemBindingGroup of the ItemsControl so the ValidationRule, AreasMatch, will validate each item. また、この例では、検証エラーを表示する Label も作成します。The example also creates a Label that displays validation errors. LabelContentValidation.ValidationAdornerSiteForProperty プロパティから取得した ValidationError にバインドされていることに注意してください。Notice that the Content of the Label is bound to a ValidationError that it gets from the Validation.ValidationAdornerSiteForProperty property. Validation.ValidationAdornerSiteForProperty の値は、エラーが発生している項目コンテナーです。The value of Validation.ValidationAdornerSiteForProperty is the item container that has the error.

<ItemsControl Name="customerList"  ItemTemplate="{StaticResource ItemTemplate}"
              ItemsSource="{Binding}">
  <ItemsControl.ItemBindingGroup>
    <BindingGroup>
      <BindingGroup.ValidationRules>
        <src:AreasMatch/>
      </BindingGroup.ValidationRules>
    </BindingGroup>
  </ItemsControl.ItemBindingGroup>
  <ItemsControl.ItemContainerStyle>
    <Style TargetType="{x:Type ContentPresenter}">
      <Setter Property="Validation.ValidationAdornerSite"
              Value="{Binding ElementName=validationErrorReport}"/>
    </Style>
  </ItemsControl.ItemContainerStyle>
</ItemsControl>
<Label Name="validationErrorReport" 
       Content="{Binding RelativeSource={RelativeSource Self}, 
       Path=(Validation.ValidationAdornerSiteFor).(Validation.Errors)[0].ErrorContent}"
       Margin="5" Foreground="Red" HorizontalAlignment="Center"/>

次の例では、項目コンテナーを取得し、コンテナーの BindingGroupUpdateSources を呼び出して、データを検証します。The following example gets the item container and calls UpdateSources on the container's BindingGroup to validate the data. ItemsControlItemBindingGroup ではなく、項目コンテナーの BindingGroupでメソッドを呼び出すことによって、データを検証する必要があります。You must validate the data by calling a method on the item container's BindingGroup, not on the ItemBindingGroup of the ItemsControl.

void saveCustomer_Click(object sender, RoutedEventArgs e)
{
    Button btn = sender as Button;
    FrameworkElement container = (FrameworkElement) customerList.ContainerFromElement(btn);

    // If the user is trying to change an items, when another item has an error,
    // display a message and cancel the currently edited item.
    if (bindingGroupInError != null && bindingGroupInError != container.BindingGroup)
    {
        MessageBox.Show("Please correct the data in error before changing another customer");
        container.BindingGroup.CancelEdit();
        return;
    }

    if (container.BindingGroup.UpdateSources())
    {
        bindingGroupInError = null;
        MessageBox.Show("Item Saved");
    }
    else
    {
        bindingGroupInError = container.BindingGroup;
    }
}
Private Sub saveCustomer_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    Dim btn As Button = TryCast(sender, Button)
    Dim container As FrameworkElement = CType(customerList.ContainerFromElement(btn), FrameworkElement)

    ' If the user is trying to change an items, when another item has an error,
    ' display a message and cancel the currently edited item.
    If bindingGroupInError IsNot Nothing AndAlso bindingGroupInError IsNot container.BindingGroup Then
        MessageBox.Show("Please correct the data in error before changing another customer")
        container.BindingGroup.CancelEdit()
        Return
    End If

    If container.BindingGroup.UpdateSources() Then
        bindingGroupInError = Nothing
        MessageBox.Show("Item Saved")
    Else
        bindingGroupInError = container.BindingGroup
    End If

End Sub

注釈

ItemBindingGroup プロパティを設定すると、各項目コンテナーは ItemBindingGroupと同じ ValidationRule オブジェクトを持つ BindingGroup を取得しますが、ItemsBindingExpressionsなど、バインド内のデータを記述するプロパティは、ItemsControl内の各項目のデータに固有です。When you set the ItemBindingGroup property, each item container gets a BindingGroup that has the same ValidationRule objects as the ItemBindingGroup, but the properties that describe the data in the bindings, such as Items and BindingExpressions, are specific to the data for each item in the ItemsControl. データの検証や項目のエラーのチェックなどの操作を実行するには、項目コンテナーの BindingGroup にアクセスする必要があります。You must access the item container's BindingGroup to perform operations such as validate the data and check for errors on an item.

適用対象