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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Landete ich mit einem
ContentControl
mit einemTabControl
- Daten-Vorlage (wie bei der original-tutorial-Projekt). Hier ist der xaml-code, den ich endete mit. Ich habe nicht ändern die code-behind-aus dem original-sample-Projekt, um diese Arbeit zu machen. DieContentControl
ist in meiner MainWindow.xaml und die beiden anderen Teile des Codes wurden in einemResourceDictionary
.