Bindung TabControl ItemsSource auf die Sammlung von ViewModels

Aus irgendeinem Grund habe ich ein heck einer Zeit immer meine TabControl ordnungsgemäß angezeigt, wenn die Bindung des ItemsSource zu einem ObservableCollection von view models. Ich stützt meinen Entwurf aus dem tutorial hier gefunden: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx. Ich habe ein paar Fragen wie meine hier aber niemand angesprochen, meine Besondere situation.
Dies ist mein TabControl in xaml.

<TabControl ItemsSource="{Binding Workspaces}"
            SelectedIndex="{Binding ActiveWorkspaceIndex}"
            ItemTemplate="{StaticResource ClosableTabItemTemplate}"/>

Wo ClosableTabItemTemplate ist die folgende.

<DataTemplate x:Key="ClosableTabItemTemplate">
        <DockPanel Width="120">
          <Button 
              Command="{Binding Path=CloseCommand}"
              Content="X"
              Cursor="Hand"
              DockPanel.Dock="Right"
              Focusable="False"
              FontFamily="Courier" 
              FontSize="9"
              FontWeight="Bold"  
              Margin="0,1,0,0"
              Padding="0"
              VerticalContentAlignment="Bottom"
              Width="16" Height="16" 
              />
          <ContentPresenter 
              Content="{Binding Path=DisplayName}" 
              VerticalAlignment="Center" 
              />
        </DockPanel>
      </DataTemplate>

Workspaces ist die ObservableCollection von view models. ActiveWorkspaceIndex ist nur der active workspace-index, verfolgen Sie in der Ansicht Modell. Ich Verbinde meine Ansicht Modell mit einer Instanz einer Sicht, die über die folgenden Daten-template in mein App.der xaml-Datei.

<DataTemplate DataType="{x:Type vm:ViewModelStartPage}">
     <v:ViewStartPage/>
 </DataTemplate>

Ich nur hinzufügen, ein view-Modell zu meiner Sammlung von Arbeitsbereichen. Ich sehe 2 Ansichten auf der Registerkarte Steuerung, und Sie sind keine Registerkarten. Es ist fast wie das TabControl nicht wissen, zu behandeln, die verschiedenen Ansichten, wie TabItems, deren Verhalten sich mehr wie ein stack-panel, stapeln sich die Ansichten. Wenn ich die tab-Elemente im code, es funktioniert so:

System.Windows.Controls.TabItem i = new System.Windows.Controls.TabItem();
i.Content = new Views.ViewStartPage();
i.Header = "A Tab Item";
this.xTabControl.Items.Add(i); 

Ich muss fehlt etwas Inhalt-Vorlage oder so etwas. Ich werde mein styling tabs später, aber für jetzt würde ich gerne immer nur die basic-tabs arbeiten. Auch die Ansichten in der Registerkarte Inhalt können unterschiedlich sein für jede Registerkarte, so dass ich nicht verwenden können, die einfache textblock TabControl Vorlage Beispiele sehe ich alle über dem Platz...
I. e. nicht dieses...

<TabControl.ContentTemplate>
    <DataTemplate>
        <TextBlock
           Text="{Binding Content}" />
    </DataTemplate>

Irgendwelche Ideen?

  • Ich habe versucht deinen code in ein test-Projekt, und das TabControl-Steuerelement funktioniert wie erwartet hier. Könnte Sie post ein Bild von "stacking" TabControl?
  • Vielen Dank, dass Sie es versuchen. Ich landete mit ein ContentControl mit einem TabControl-Steuerelement-Daten-Vorlage. Dies schien die Dinge zu beheben. Ehrlich gesagt, ich bin nicht erfahren genug, um zu erklären, warum Sie diese Dinge geändert, aber es funktioniert jetzt. Ich poste meinen funktionierenden code.
InformationsquelleAutor akagixxer | 2012-12-23
Schreibe einen Kommentar