「東雲 忠太郎」の平凡な日常のできごと

「東雲 忠太郎」の平凡な日常のできごと

2024.04.21
XML
カテゴリ: C#.NET


動的にタブの内容を複製する場合、ViewModelを使ってタブの内容を管理し、そのViewModelを元に新しいタブの内容を作成することが一般的です。以下に、そのようなサンプルコードを示します。


まず、ViewModelを作成します。


```csharp

using System.Collections.ObjectModel;


public class TabViewModel

{

    public ObservableCollection<string> Items { get; set; }


    public TabViewModel()

    {

        Items = new ObservableCollection<string>();

    }

}

```


次に、MainWindow.xaml.csファイルに、TabControlのコンテンツを複製するためのメソッドを追加します。


```csharp

using System.Windows;

using System.Windows.Controls;


public partial class MainWindow : Window

{

    private ObservableCollection<TabViewModel> tabViewModels;


    public MainWindow()

    {

        InitializeComponent();

        tabViewModels = new ObservableCollection<TabViewModel>();

        tabViewModels.Add(new TabViewModel()); // 最初のタブを追加

        tabControl.ItemsSource = tabViewModels;

    }


    private void AddTabButton_Click(object sender, RoutedEventArgs e)

    {

        tabViewModels.Add(new TabViewModel()); // 新しいタブを追加

    }


    private void CloneTabButton_Click(object sender, RoutedEventArgs e)

    {

        if (tabControl.SelectedItem != null)

        {

            // 選択されたタブの内容をコピーして新しいタブを追加

            TabViewModel selectedTabViewModel = (TabViewModel)tabControl.SelectedItem;

            TabViewModel clonedTabViewModel = new TabViewModel();

            foreach (string item in selectedTabViewModel.Items)

            {

                clonedTabViewModel.Items.Add(item);

            }

            tabViewModels.Add(clonedTabViewModel);

        }

    }

}

```


最後に、MainWindow.xamlファイルにボタンを追加し、そのボタンがクリックされたときにタブの内容を複製するメソッドを呼び出すようにします。


```xml

<Window x:Class="WpfApp.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Title="TabControl Sample" Height="450" Width="800">

    <Grid>

        <Grid.RowDefinitions>

            <RowDefinition Height="Auto"/>

            <RowDefinition Height="*"/>

        </Grid.RowDefinitions>


        <StackPanel Grid.Row="0" Orientation="Horizontal">

            <Button Content="Add Tab" Click="AddTabButton_Click"/>

            <Button Content="Clone Tab" Click="CloneTabButton_Click"/>

        </StackPanel>


        <TabControl Grid.Row="1" x:Name="tabControl">

            <TabControl.ItemTemplate>

                <DataTemplate>

                    <TextBlock Text="Tab"/>

                </DataTemplate>

            </TabControl.ItemTemplate>

            <TabControl.ContentTemplate>

                <DataTemplate>

                    <ListBox ItemsSource="{Binding Items}"/>

                </DataTemplate>

            </TabControl.ContentTemplate>

        </TabControl>

    </Grid>

</Window>

```


このサンプルでは、Add Tabボタンをクリックすると新しいタブが追加され、Clone Tabボタンをクリックすると選択されたタブの内容がコピーされて新しいタブが追加されます。TabControlのItemsSourceにtabViewModelsをバインドしているため、ViewModelを追加または変更することでTabControlの内容が自動的に更新されます。






お気に入りの記事を「いいね!」で応援しよう

Last updated  2024.04.21 15:37:54


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

© Rakuten Group, Inc.
Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: