2015-03-13 3 views
0

У меня есть tabcontrol в wpf, я хочу отправить триггер в мою модель просмотра, когда изменяется вкладка. Триггер должен включать либо имя вкладки, либо индекс табуляции.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 –

+0

Сообщение XAML для полного TabControl и ViewModel. – sthotakura

ответ

0

Вы не передаете ElementName в CommandParameter.

<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 у вас есть два свойства: одно свойство удерживает коллекцию всех доступных вкладок и другое свойство, чтобы удерживать текущую выбранную вкладку.

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 обновляется всякий раз, когда вкладка переключатель происходит в представлении.

В качестве альтернативы, если вас интересует только индекс выбранной вкладки. Имейте свойство в ViewModel, чтобы удерживать выбранную вкладку Индекс и привязать ее к свойству SelectedIndex в TabControl.

ViewModel

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

XAML

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