Wpf 如何在触发器上获取TabHeader

Wpf 如何在触发器上获取TabHeader,wpf,xaml,binding,Wpf,Xaml,Binding,我有一个tabcontrol。我试图将tabcontrol作为参数传递,以确定所选的选项卡项,以便获得选项卡标题名称。绑定这个似乎不起作用。想法 <TabControl Background="#FFF9F9F9" Height="650"> <i:Interaction.Triggers> <i:EventTrigger EventName="SelectionChanged"> <n:ExecuteC

我有一个tabcontrol。我试图将tabcontrol作为参数传递,以确定所选的选项卡项,以便获得选项卡标题名称。绑定这个似乎不起作用。想法

<TabControl Background="#FFF9F9F9" Height="650">
    <i:Interaction.Triggers>
        <i:EventTrigger  EventName="SelectionChanged">
            <n:ExecuteCommandAction Command="{Binding UpdateTabCommand}" Parameter="{Binding this}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
1) 使用
ElementName
绑定

例子:
首先,在WPF中没有
{Binding this}
这样的东西。如果要引用要在其上设置绑定的元素,请使用模式设置为的绑定

第二项观察。将UI元素传递给ViewModel的气味很难闻(影响可测试性,增加代码耦合,并且类很可能最终违反更多)。修复方法非常简单:只需将
TabControl.SelectedItem
绑定到ViewModel上的字段

_updateTabCommand = new ActionCommand< TabControl>(UpdateTab);
public void UpdateTab(TabControl tabControl)
{
    var tabItem = (TabItem)tabControl.SelectedItem;
<TabControl Background="#FFF9F9F9"
            Height="650"
            Name="TabControl1">
    <i:Interaction.Triggers>
        <i:EventTrigger  EventName="SelectionChanged">
            <i:InvokeCommandAction Command="{Binding UpdateTabCommand}"
                                    CommandParameter="{Binding ElementName=TabControl1}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</TabControl>
<i:Interaction.Triggers>
    <i:EventTrigger  EventName="SelectionChanged">
        <i:InvokeCommandAction Command="{Binding UpdateTabCommand}"
                                CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TabControl}}" />
    </i:EventTrigger>
</i:Interaction.Triggers>