3

ユーザーコントロールの要素にバインドする方法を教えてもらえますか?

IDataErrorInfo と連携する datatrigger を使用して、ボタンを無効/有効にしようとしています。

だから私は通常、要素が同じビューにあるときにこのようにします

  <Button Name="AddEditButton" Content="{Binding ButtonContent}" Command="{Binding AddCustomerCommand}" HorizontalAlignment="Center"  Margin="0 10" >
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Setter Property="IsEnabled" Value="false" />
                <Style.Triggers>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding ElementName=CustomerFirstNameTextBox, Path=(Validation.HasError)}" Value="false" />
                            <Condition Binding="{Binding ElementName=CustomerLastNameTextBox, Path=(Validation.HasError)}" Value="false" />
                            <Condition Binding="{Binding ElementName=CustomerEmailTextBox, Path=(Validation.HasError)}" Value="false" />
                            <Condition Binding="{Binding ElementName=CustomerPhoneTextBox, Path=(Validation.HasError)}" Value="false" />
                            <Condition Binding="{Binding ElementName=CustomerCellphoneTextBox, Path=(Validation.HasError)}" Value="false" />

                        </MultiDataTrigger.Conditions>
                        <Setter Property="IsEnabled" Value="true" />
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

しかし今、ビューで使用されているユーザー コントロール (AdressControl) のコントロールにバインドする条件を追加する必要があります。

このようにユーザーコントロールの要素に簡単にアクセスしたいと思っていました

<Condition Binding="{Binding ElementName=AddressControl , Path=StreetTextBox.(Validation.HasError)}" Value="false"  />

しかし、役に立たない。どんな助けでも大歓迎です

4

1 に答える 1

5

FindAncestorプロパティを正しく解決する必要があります

  <Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type AddressControl}}, Path=StreetTextBox.(Validation.HasError)}" Value="false"  />

これは基本的にビジュアル ツリーを逆方向に検索して型を探しAddressControl、プロパティを解決します。

于 2012-12-09T21:27:30.020 に答える