何らかの理由で、ビューモデルTabControl
にバインドするときに適切に表示するItemsSource
のに時間がかかります。ObservableCollection
ここにあるチュートリアルに基づいて設計しています: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx。ここで私のような質問をいくつか見つけましたが、私の特定の状況に対処するものはありませんでした。これは私TabControl
のxamlです。
<TabControl ItemsSource="{Binding Workspaces}"
SelectedIndex="{Binding ActiveWorkspaceIndex}"
ItemTemplate="{StaticResource ClosableTabItemTemplate}"/>
以下の場所ClosableTabItemTemplate
です。
<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
ObservableCollection
ビューモデルのです。ActiveWorkspaceIndex
ビュー モデルで追跡しているアクティブなワークスペース インデックスです。App.xaml ファイルの次のデータ テンプレートを使用して、ビュー モデルをビューのインスタンスに関連付けます。
<DataTemplate DataType="{x:Type vm:ViewModelStartPage}">
<v:ViewStartPage/>
</DataTemplate>
ワークスペースのコレクションにビュー モデルを 1 つだけ追加します。タブ コントロールに 2 つのビューが表示されますが、それらはタブ化されていません。TabControl がさまざまなビューを TabItems として扱うことを知らないようで、ビューを積み重ねるスタック パネルのように動作します。コードでタブ項目を作成すると、次のように正常に動作します。
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);
コンテンツ テンプレートか何かが不足しているに違いありません。後でタブのスタイルを設定しますが、今のところ、基本的なタブが機能するだけで十分です。また、タブのコンテンツのビューはタブごとに異なる場合があるため、いたるところで見られる単純なテキストブロック TabControl テンプレートの例を使用できません...つまり、これではありません...
<TabControl.ContentTemplate>
<DataTemplate>
<TextBlock
Text="{Binding Content}" />
</DataTemplate>
何か案は?