首页 > 解决方案 > 我想用动态将项目添加到 tabcontrol

问题描述

我正在使用 MVVM 模式制作 WPF 应用程序。

这是我多次单击一个按钮,如果我单击子按钮,它会显示带有许多选项卡的子窗口。

标签计数与点击次数相同。

但我想在一个标签中包含项目。

并且点击次数并不总是相同的。

应该如何编辑我的代码?

//看法

<Grid>
    <Button Content="CountUp" HorizontalAlignment="Left" Height="76" Margin="72,57,0,0" VerticalAlignment="Top" Width="135" Click="OnClickCountUp"/>
    <Button Content="OpenSubWindow" HorizontalAlignment="Left" Height="74" Margin="269,202,0,0" VerticalAlignment="Top" Width="123" Click="OnClicOpenSubWindow"/>

    <Label Content="Count : " HorizontalAlignment="Left" Height="28" Margin="254,73,0,0" VerticalAlignment="Top" Width="53"/>
    <Label Content="{Binding CountVal}" HorizontalAlignment="Left" Height="28" Margin="307,73,0,0" VerticalAlignment="Top" Width="67"/>
</Grid>

//视图模型

public class MainViewModel : INotifyPropertyChanged
{
    private string count;
    public string CountVal
    {
        get { return count; }
        set
        {
            count = value;
            NotifyPropertyChanged("CountVal");
        }

    }
    public ObservableCollection<TabItemData> TabItems { get; set; } = new ObservableCollection<TabItemData>();


    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

public class TabItemData
{
    public string Header { get; set; }
    public ObservableCollection<CheckBox> Content { get; set; }
}

//代码隐藏

public partial class MainWindow : Window
{
    private MainViewModel mViewmodel;
    int count = 0;

    public MainWindow()
    {
        InitializeComponent();
        mViewmodel = new MainViewModel();
        this.DataContext = mViewmodel;
    }

    private void OnClicOpenSubWindow(object sender, RoutedEventArgs e)
    {
        Window1 window1 = new Window1(mViewmodel);
        window1.Show();
    }

    private void OnClickCountUp(object sender, RoutedEventArgs e)
    {
        count++;

        ObservableCollection<CheckBox> items = new ObservableCollection<CheckBox>();

        for (int i = 0; i <= count; i++)
        {
            CheckBox checkBox = new CheckBox();
            checkBox.IsChecked = false;
            checkBox.Content = count.ToString();

            items.Add(checkBox);
        }

        mViewmodel.CountVal = count.ToString();
        mViewmodel.TabItems.Add(new TabItemData() { Header = count.ToString(), Content = items });
    }
}

//子窗口的视图

<Grid>
    <TabControl ItemsSource="{Binding TabItems}">
        <TabControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Header}" />
            </DataTemplate>
        </TabControl.ItemTemplate>

        <TabControl.ContentTemplate>
            <DataTemplate>
                <CheckBox Content="{Binding Content}" />
            </DataTemplate>
        </TabControl.ContentTemplate>
    </TabControl>
</Grid>

//SubWindow 的代码隐藏

public partial class Window1 : Window
{
    public Window1(MainViewModel pMainViewModel)
    {
        InitializeComponent();
        this.DataContext = pMainViewModel;
    }
}

并且有补品。

@我想将复选框用作选项卡中的项目。所以我不想改变。

@如果可以,我想每 5 个项目添加选项卡。如果你给我那个代码,我很高兴。(例如,page1 包含 item1、2、3、4 和 5。page2 包含 item6、7...等等。)

标签: c#mvvmtabcontrol

解决方案


推荐阅读