Shumii
Shumii

Reputation: 4581

How to bind to self?

I know RelativeSource Self binds to the DataContext in scope. That is not what I want. I have a TextBlock and I want to set a trigger which will multibind 2 things. A value from my DataContext/ViewModel which is easy and I have done that. The 2nd value I want is the Text property of the TextBlock. I can't seem to get the syntax at all.

I have this trigger in a TextBlock style.

<Style TargetType="TextBlock"}">
    <Setter Property="Margin" Value="10"></Setter>
    <Style.Triggers>
        <DataTrigger Value="True">
            <DataTrigger.Binding>
                <MultiBinding Converter="{StaticResource CustomMultiValueConverter}">
                    <Binding Path="SelectedCategory"></Binding>
                    <Binding Path="Text" RelativeSource="{RelativeSource Self}"></Binding>
                </MultiBinding>
            </DataTrigger.Binding>
            <Setter Property="Foreground" Value="Blue"></Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>

Upvotes: 0

Views: 2616

Answers (1)

Sheridan
Sheridan

Reputation: 69985

You should be able to use a RelativeSource.AncestorType Binding to reach the TextBlock.Text value. Try this:

<Style TargetType="{x:Type TextBlock}">
    <Setter Property="Margin" Value="10"></Setter>
    <Style.Triggers>
        <DataTrigger Value="True">
            <DataTrigger.Binding>
                <MultiBinding Converter="{StaticResource CustomMultiValueConverter}">
                    <Binding Path="SelectedCategory"></Binding>
                    <Binding Path="Text" RelativeSource="{Binding RelativeSource 
                        AncestorType={x:Type TextBlock}}" />
                </MultiBinding>
            </DataTrigger.Binding>
            <Setter Property="Foreground" Value="Blue"></Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>

Upvotes: 1

Related Questions