2013-02-22 2 views
0

MVVM 방식으로 WPF 프로젝트를 개발 중입니다.Infragistics WPF TabItemEx의 닫기 이벤트에 바인딩하는 방법?

Observable Collection을 (를) XamTabControl에 바인딩했습니다. Observable Collection에 새 항목을 추가하면 새 탭이 생성됩니다. 그러나 탭을 닫으면 탭 항목이 Observable Collection에서 제거되지 않습니다.

탭에 대한 닫는 이벤트 (또는 닫힌 이벤트)를 트리거 할 수 있으면이 작업을 수동으로 수행 할 수 있습니다. 그러나이 두 사건은 해고되지 않습니다. 그러나 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

closing 이벤트를 실행하는 객체의 DataContextTabCloseCommand

를 포함하는 클래스가 TabItem 클래스, 그리고 그것 때문에 아마이다 ElementName 또는 RelativeSource을 사용하여 명령 바인딩의 SourceTabControl.DataContext에 먼저 설정하면

을 사용할 수 있습니다.
<i:InvokeCommandAction Command="{Binding ElementName=xamTabControl1, 
             Path=DataContext.TabCloseCommand}" /> 
0

XamTabControl에 Closing 또는 Closed 이벤트가 없기 때문에 연결된 이벤트를 연결해야하는 코드가 작동하지 않습니다. EventTrigger를 사용하여 xamTabControl에서 TabItemEx 이벤트에 연결할 수 있는지 확실하지 않습니다. 당신이 EventTrigger없이 XamTabControl에 대한 처리기를 추가한다면, 다음을 수행 할 것입니다 :

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

</igWindows:XamTabControl> 

는 또한 도움말의 Removing a Closed Tab 항목에 대한 자세한 예를 볼 수 있습니다.

+0

예. tabitrol 명령을 tabitem에 바인딩하지 않았습니다. 그래서 코드를 업데이트했지만 작동하지 않았습니다. '<난 : Interaction.Triggers는> <난 : EventTrigger EventName을 = "igWindows : TabItemEx.Closing"> <난 : InvokeCommandAction 명령 = "{CloseTabCommand 바인딩}"/> ' – Haritha

+0

답변을하기 전에 테스트를 해봤지만 작동하지 않았다. EventTrigger를 사용하여이 작업을 수행하는 올바른 방법이 무엇인지, 또는 EventTrigger가 XamTabControl에 첨부 될 때 TabItemEx에서 이벤트를 수신 할 수 있는지 확실하지 않습니다. – alhalama

관련 문제