Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何绑定到Infrastics WPF TabItemEx的关闭事件?_Wpf_Mvvm_Tabs_Command_Infragistics - Fatal编程技术网

如何绑定到Infrastics WPF TabItemEx的关闭事件?

如何绑定到Infrastics WPF TabItemEx的关闭事件?,wpf,mvvm,tabs,command,infragistics,Wpf,Mvvm,Tabs,Command,Infragistics,我正在用MVVM的方式开发一个WPF项目 我将可观察集合绑定到XamTabControl。如果我向可观察集合添加一个新项,就会生成一个新选项卡。但如果我关闭选项卡,则不会从可观察集合中删除选项卡项 如果可以触发选项卡的关闭事件(或关闭事件),则可以手动执行此操作。但这两起事件并没有被触发。但是会触发一些事件,例如MouseUp <igWindows:XamTabControl Height="198" HorizontalAlignment="Left" Margin="0,5

我正在用MVVM的方式开发一个WPF项目

我将可观察集合绑定到XamTabControl。如果我向可观察集合添加一个新项,就会生成一个新选项卡。但如果我关闭选项卡,则不会从可观察集合中删除选项卡项

如果可以触发选项卡的关闭事件(或关闭事件),则可以手动执行此操作。但这两起事件并没有被触发。但是会触发一些事件,例如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()
{

}
private-observeCollection选项卡;
私有选项卡Item Selected选项卡;
私有ICommand tabCloseCommand;
公共可观察集合选项卡
{
得到
{
返回标签;
}
设置
{
tabs=值;
NotifyPropertyChanged(“标签”);
}
}
公共选项卡项已选择选项卡
{
得到
{
返回所选选项卡;
}
设置
{
selectedTab=值;
NotifyPropertyChanged(“SelectedTab”);
}
}
公共ICommand TabCloseCommand
{
得到
{
if(tabCloseCommand==null)
{
tabCloseCommand=new RelayCommand(param=>this.CloseTab(),null);
}
返回命令;
}
}
私有void CloseTab()
{
}

这可能是因为运行关闭事件的对象的
DataContext
是您的
TabItem
类,而不是包含
TabCloseCommand

首先使用
ElementName
RelativeSource
设置绑定到
TabControl.DataContext
的命令的
,它应该可以工作

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

您必须连接关闭事件的代码不起作用,因为XamTabControl上没有关闭或关闭事件,而XamTabControl是关联的对象。我不确定是否可以使用EventTrigger从xamTabControl附加到TabItemEx的事件。如果要在不使用EventTrigger的情况下将处理程序添加到XamTabControl,请执行以下操作:

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

</igWindows:XamTabControl>


您还可以在帮助中的主题中看到详细的示例。

是。我已将命令绑定到tabcontrol,而不是tabitem。因此,我更新了代码,但它没有工作<代码>我在回答之前已经测试过了,但是如果我以我在回答中显示的方式添加事件,它就不起作用了。我不确定使用EventTrigger执行此操作的正确方法是什么,或者当EventTrigger连接到XamTabControl时,是否可以侦听TabItemEx上的事件。