0

私はMVVMの方法でWPFプロジェクトを開発しています。

Observable Collection を XamTabControl にバインドしました。Observable Collection に新しいアイテムを追加すると、新しいタブが生成されます。しかし、タブを閉じても、タブ項目は Observable Collection から削除されません。

タブの Closing Event (または Closed Event) をトリガーできる場合は、これを手動で行うことができます。しかし、これら 2 つのイベントは発生しません。ただし、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()
{

}
4

2 に答える 2

0

おそらくDataContext、Closing イベントを実行するオブジェクトの がTabItemクラスであり、 を含むクラスではないためです。TabCloseCommand

ElementNameorを使用して、コマンドバインディングのを最初RelativeSourceに設定すると、機能するはずですSourceTabControl.DataContext

<i:InvokeCommandAction Command="{Binding ElementName=xamTabControl1, 
                                         Path=DataContext.TabCloseCommand}" />
于 2013-02-22T14:12:11.810 に答える
0

XamTabControl に Closing または Closed イベントがなく、それが関連付けられたオブジェクトであるため、終了イベントを接続する必要があるコードは機能しません。EventTrigger を使用して xamTabControl から TabItemEx のイベントにアタッチできるかどうかはわかりません。EventTrigger なしでハンドラーを XamTabControl に追加する場合は、次のようにします。

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

</igWindows:XamTabControl>

ヘルプの「閉じたタブの削除」トピックで詳細な例を確認することもできます。

于 2013-02-27T20:55:32.500 に答える