2012-02-24 42 views
5

我想在選擇TabControl的TabItem時調用Command。使用帶有TabItem的命令

有沒有辦法做到這一點,而不打破MVVM模式?

+1

您也可以綁定到IsSelected並處理對該屬性的更改你的ViewModel。 – Will 2012-02-24 19:08:15

回答

6

使用AttachedCommand Behavior,這將讓你綁定的命令,WPF事件

<TabControl ... 
    local:CommandBehavior.Event="SelectionChanged" 
    local:CommandBehavior.Command="{Binding TabChangedCommand}" /> 

當然,如果你使用的MVVM設計模式,結合SelectedItemSelectedIndex,你也可以在運行命令在PropertyChanged事件

void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    if (e.PropertyName == "SelectedIndex") 
     RunTabChangedLogic(); 
} 
5

它可以使用下面的類一起做:

  • EventTrigger類從System.Windows.Interactivity命名空間(System.Windows.Interactivity程序集)。從GalaSoft.MvvmLight.Command命名空間
  • EventToCommand類(MVVM Light Toolkit組件,例如,GalaSoft.MvvmLight.Extras.WPF4):

XAML:

<Window ... 
     xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
     xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command 
     ...> 
... 
    <TabControl> 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="SelectionChanged"> 
       <cmd:EventToCommand Command="{Binding TabSelectionChangedCommand}" 
            PassEventArgsToCommand="True" /> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 

     <TabItem>...</TabItem> 
     <TabItem>...</TabItem> 
    </TabControl> 
... 
</Window> 

ViewModel構造創建命令的一個實例:

TabSelectionChangedCommand = new RelayCommand<SelectionChangedEventArgs>(args => 
    { 
     // Command action. 
    }); 
+1

這只是來自[Blend SDK](http://www.microsoft.com/download/en/details.aspx?id=10801)的'Interactivity',你不需要任何MVVM框架來使用它。 – 2012-02-24 21:24:48

+0

@ H.B。,對於'EventTrigger'類是正確的。但是'EventToCommand'類屬於MVVM Light Toolkit。 – 2015-05-13 11:56:41

+0

相關問題:http://stackoverflow.com/q/5868589/490018。 – 2015-05-13 12:04:05