带参数的Wpf tabcontrol trig

时间:2015-03-13 08:05:01

标签: wpf tabcontrol

我在wpf中有一个tabcontrol,我想在选项卡选择发生变化时向我的viewmodel发送一个触发器。 trig应包括选项卡名称或选项卡索引。

<i:Interaction.Triggers>
    <i:EventTrigger EventName="SelectionChanged">
        <i:InvokeCommandAction Command="{Binding Path=TabChangedCommand}"
                               CommandParameter="{Binding ElementName=TabControl, Path=Name}"/>
        </i:EventTrigger>
</i:Interaction.Triggers>

触发器工作正常,但参数始终为null。

2 个答案:

答案 0 :(得分:0)

您没有在CommandParameter中传递ElementName。

    <TabControl x:Name="mytab">
     ....
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <i:InvokeCommandAction Command="{Binding Path=TabChangedCommand}"
                                   CommandParameter="{Binding ElementName=mytab}"/>
            </i:EventTrigger>
    </i:Interaction.Triggers>
    ....
    </TabControl>

做这样的事情

答案 1 :(得分:0)

您可以通过使用MVVM来实现您的目标。

ViewModel中有两个属性,一个属性用于存放所有可用选项卡的集合,另一个属性用于保存当前选定的选项卡。

<强>视图模型

public ObservableCollection<ITabViewModel> Tabs { get; private set; }

public ITabViewModel SelectedTab
{
    get { return _selectedTab; }
    set
    {
        _selectedTab = value;
        RaisePropertyChanged(() => SelectedTab);
    }
}

<强> XAML

<TabControl ItemsSource="{Binding Tabs}"
            SelectedItem="{Binding SelectedTab}" />

通过上面的设置,ViewModel中的SelectedTab属性会在视图中发生选项卡切换时更新。

或者,如果您只对所选标签的索引感兴趣。在ViewModel中有一个属性来保存选定的选项卡索引并将其绑定到TabControl上的SelectedIndex属性。

<强>视图模型

public int SelectedTabIndex
{
    get { return _selectedTabIndex; }
    set
    {
        _selectedTabIndex = value;
        RaisePropertyChanged(() => SelectedTabIndex);
    }
}

<强> XAML

<TabControl ItemsSource="{Binding Tabs}"
            SelectedIndex="{Binding SelectedTabIndex}"  />