WPF

[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の中身は、表示したい内容に応じて適当にカスタマイズしてください。
 
 

-WPF
-,