2014-09-09 2 views
0

Я хочу захватить событие изменения выбранного элемента TabItem, т. Е. Команда ViewModel вызывается только тогда, когда пользователь меняет вкладки. У меня есть это на данный момент, команда вызывается успешно, но выбор изменен - ​​это туннелирование по визуальному дереву, и поэтому выбор изменен, захвачен по всему элементу вкладки не только тогда, когда пользователь меняет вкладки. Есть ли способ ограничить триггер только вкладка изменяется ?:Остановка запуска туннелирования событий в WPF MVVM?

<TabControl Margin="10"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="SelectionChanged"> 
      <i:InvokeCommandAction Command="{Binding CollapsedExpanderCommand}" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
    <TabItem Header="Account" >   
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition/> 
+0

Я думаю, что вы должны передать событие аргументы и установить свойство обработано. другой вариант может быть поставлен в коде позади selectionchanged и установить e.handled = true и посмотреть, также вызвана ли команда. – sexta13

ответ

0

решаемые это с помощью триггера PreviewMouseLeftButtonDown событий на TabItem, связанным с ICommand in my ViewModel :

<TabItem Header="Memberships" Margin="0,0,-5,-3" HorizontalAlignment="Right" > 
        <i:Interaction.Triggers> 
         <i:EventTrigger EventName="PreviewMouseLeftButtonDown"> 
          <i:InvokeCommandAction Command="{Binding MembershipTabSelectedCommand}" /> 
         </i:EventTrigger> 
        </i:Interaction.Triggers> 
1

Если вы используете MVVM, почему бы вам не использовать SelectedItem зависимости собственности и обязательное свойство в вашем ViewModel, например:

<TabControl ItemsSource="{Binding Path=Items, Mode=OneWay}" 
      SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}"> 
</TabControl> 
Смежные вопросы