2015-03-13 54 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}" />