Search code examples
c#wpfdata-bindingmultidatatrigger

How can I use Grid.Row Property as a DataBinding Path for a MultiDataTrigger Condition?


I'd like to set a MultiDataTrigger for a TextBox as shown in the code below.

If IsNormal property, which I defined in the code-behind, is false and the TextBox is in the 2nd row of a Grid, IsEnabled of it should be false.

However, the Condition regarding the Grid.Row does not work properly.

Could you tell me how it is possible to use a Grid.Row property as a binding path in this case?

<Style TargetType="TextBox">
    <Style.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}, Path=IsNormal}" 
                           Value="False"/>
                <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=Grid.Row}"
                           Value="2"/>
            </MultiDataTrigger.Conditions>
            <Setter Property="IsEnabled" Value="False"/>
        </MultiDataTrigger>
    </Style.Triggers>
</Style>

Solution

  • Grid.Row is an attached property, so it should be like this:

    <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=(Grid.Row)}"
                           Value="2"/>
    

    Use (OwnerClass.AttachedProperty) to indicate path to AttachedProperty of the OwnerClass.