2013-02-22 150 views
0

我正在從MVVM方式開發WPF項目。如何綁定到Infragistics WPF TabItemEx的關閉事件?

我將Observable Collection綁定到XamTabControl。如果我向Observable Collection添加一個新項目,則會生成一個新選項卡。但是,如果我關閉該選項卡,該選項卡項目不會從Observable集合中刪除。

我可以手動執行此操作,如果我可以觸發標籤的關閉事件(或關閉事件)。但是這兩件事並沒有被解僱。但是有些事件被觸發,如MouseUp。

<igWindows:XamTabControl 
Height="198" 
HorizontalAlignment="Left" 
Margin="0,54,0,0" 
ItemsSource="{Binding Tabs}" 
SelectedItem="{Binding SelectedTab}" 
Name="xamTabControl1" 
VerticalAlignment="Top" 
Width="651"> 

    <i:Interaction.Triggers> 
      <i:EventTrigger EventName="Closing"> 
       <i:InvokeCommandAction Command="{Binding TabCloseCommand}" /> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 

    <igWindows:XamTabControl.ItemContainerStyle> 
      <Style TargetType="igWindows:TabItemEx"> 
       <Setter Property="Header" Value="{Binding Header}"/> 
       <Setter Property="CloseButtonVisibility" Value="{Binding CloseButtonVisibility}"/> 
      </Style> 
     </igWindows:XamTabControl.ItemContainerStyle> 

    <igWindows:XamTabControl.ContentTemplate> 
      <!-- this is the body of the TabItem template--> 
      <DataTemplate> 
       <TextBlock Text="{Binding Content}" /> 
      </DataTemplate> 
     </igWindows:XamTabControl.ContentTemplate> 

</igWindows:XamTabControl> 

這是我的視圖模型

private ObservableCollection<TabItem> tabs; 
private TabItem selectedTab; 
private ICommand tabCloseCommand; 

public ObservableCollection<TabItem> Tabs 
{ 
    get 
    { 
     return tabs; 
    } 
    set 
    { 
      tabs = value; 
      NotifyPropertyChanged("Tabs"); 
    } 
} 



public TabItem SelectedTab 
{ 
    get 
    { 
      return selectedTab; 
    } 
    set 
    { 
      selectedTab = value; 
      NotifyPropertyChanged("SelectedTab"); 
    } 
} 



public ICommand TabCloseCommand 
{ 
    get 
    { 
      if (tabCloseCommand == null) 
      { 
      tabCloseCommand = new RelayCommand(param => this.CloseTab(), null); 
      } 
      return tabCloseCommand; 
     } 
} 



private void CloseTab() 
{ 

} 

回答

0

這可能是因爲DataContext爲運行Closing事件的對象是你的TabItem類,而不是包含TabCloseCommand

類使用ElementNameRelativeSource首先將您的命令的Source設置爲TabControl.DataContext,並且它應該工作

<i:InvokeCommandAction Command="{Binding ElementName=xamTabControl1, 
             Path=DataContext.TabCloseCommand}" /> 
0

您必須連接關閉事件的代碼不起作用,因爲XamTabControl上沒有關閉或關閉事件,並且這是關聯的對象。我不確定是否可以使用EventTrigger從xamTabControl附加到TabItemEx的事件。如果您要添加一個處理程序到XamTabControl沒有EventTrigger,你會做以下幾點:

<igWindows:XamTabControl 
    Name="xamTabControl1" 
    AllowTabClosing="True" 
    igWindows:TabItemEx.Closed="OnTabClosed"> 

</igWindows:XamTabControl> 

您還可以看到在幫助Removing a Closed Tab主題中一個詳細的例子。

+0

是的。我已經將命令綁定到tabcontrol而不是tabitem。所以我已經更新了代碼,但沒有奏效。 ' ' – Haritha 2013-02-28 06:08:28

+0

我已經測試過,在回答之前,它沒有工作,但如果我添加事件的方式,我顯示在我的答案它的工作原理。我不確定使用EventTrigger執行此操作的正確方法是什麼,或者當EventTrigger連接到XamTabControl時可以在TabItemEx上監聽事件。 – alhalama 2013-02-28 13:49:10