[WPF] (MVVM)TabControlのタブを動的に生成
2016/10/08
MVVMパターンでTabControlのタブを動的に増減させる方法。
ViewModelで定義したコレクションをTabControlのItemsSourceプロパティにBindingすることで、タブの動的な増減を実現できます。
まず、TabItemに関するデータを管理するクラスを作成します。
class TabItemData
{
/// <summary>
/// ヘッダ
/// </summary>
public string Header { get; set; }
/// <summary>
/// Tab内のコンテンツ
/// </summary>
public string Content { get; set; }
}
ViewModelでこのデータを管理するコレクションを定義。
適当な場所でコレクションにデータを詰めます。
public class Hoge
{
/// <summary>
/// タブアイテムデータコレクション
/// </summary>
public ObservableCollection<TabItemData> TabItems { get; set; } = new ObservableCollection<TabItemData>();
public Hoge()
{
TabItems.Add(new TabItemData() { Header = "Tab1", Content = "Content1" });
TabItems.Add(new TabItemData() { Header = "Tab2", Content = "Content2" });
}
}
最後に、xaml側でTabItemのTemplateを定義します。
<TabControl ItemsSource="{Binding TabItems}">
<TabControl.ItemTemplate>
<!-- ヘッダのテンプレート -->
<DataTemplate>
<TextBlock Text="{Binding Header}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<!-- TabItemのコンテンツ -->
<DataTemplate>
<TextBlock Text="{Binding Content}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
実行して「Tab1」タブを選択すると「Content1」、「Tab2」タブを選択すると「Content2」が表示されることが確認できます。
TabItemDataクラスやTemplateの中身は、表示したい内容に応じて適当にカスタマイズしてください。