为什么在使用RelativeSource = {RelativeSource Self}时总是得到null?

时间:2018-09-13 04:02:33

标签: wpf xaml data-binding

我想问为什么在使用RelativeSource={RelativeSource Self}时总是得到空值。

<TextBlock Tag="{Binding SomeValue}" Text="{Binding SomeValue, Mode=TwoWay, NotifyOnTargetUpdated=True, Converter={StaticResource enumConverter}, ConverterParameter={x:Type EnumModel:SomeEnum},UpdateSourceTrigger=PropertyChanged}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="TargetUpdated">
            <i:InvokeCommandAction Command="{Binding DataContext.SomeCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type v:MyView}}}"
            CommandParameter="{Binding Tag, RelativeSource={RelativeSource Self}}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</TextBlock>

我已经通过使用ElementName来解决它,如下所示:

<TextBlock x:Name="txtSortDirection" Tag="{Binding SomeValue}" Text="{Binding SomeValue, Mode=TwoWay, NotifyOnTargetUpdated=True, Converter={StaticResource enumConverter}, ConverterParameter={x:Type EnumModel:SomeEnum},UpdateSourceTrigger=PropertyChanged}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="TargetUpdated">
            <i:InvokeCommandAction Command="{Binding DataContext.SomeCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type v:MyView}}}"
            CommandParameter="{Binding Tag, ElementName=txtSortDirection}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</TextBlock>

但是我仍然想知道为什么我在使用RelativeSource={RelativeSource Self}时会得到null?

1 个答案:

答案 0 :(得分:1)

RelativeSource={RelativeSource Self}用于获取元素自身作为Binding中的源。

并且仅对UIElement 生效。

但是您可以在i:InvokeCommandAction中的Trigger上使用它, 它不是UIElement