c# - 我想用动态将项目添加到 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...等等。)
解决方案
推荐阅读
- php - php 使用作曲家包 VMWarephp
- java - Java SE CDI Maven 依赖项?
- c++ - glm/detail 中没有文件 type_mat.hpp
- python - 在散点图中给定方程画一条线
- reactjs - 为什么我的反应代码中的金额和费用没有呈现到屏幕上
- perl - 如何在 Perl 中按一列分类
- django - 使用 Zappa 和 Django 应用程序处理事件
- java - 将 HTML 转换为 java 中的文本后读取字符串文本内容
- java - Using Actions able to select element but not able drag element to particular location, because drop functionality is created on hover
- angular - Angular Universal - 用模拟模块替换真实模块