2015-03-13 53 views
0

我在wpf中有一个tabcontrol,我想在选项卡选择更改时向我的viewmodel发送一个触发器。该trig应该包含选项卡名称或选项卡索引。Wpf tabcontrol 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> 

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

+0

分享您的TabControl – 2015-03-13 08:06:32

+0

邮政XAML完全的TabControl和视图模型的代码。 – sthotakura 2015-03-13 09:02:10

回答

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> 

做这样的事情

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}" /> 

通过上述设置,在视图模型的SelectedTab财产每当标签开关在查看情况得到更新。

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

视图模型

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

XAML

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