Я хочу добавить элемент в tabcontrol с динамическим - PullRequest
0 голосов
/ 22 января 2019

Я делаю приложение WPF с шаблоном MVVM.

Это то, что я нажимаю кнопку много раз, и если я нажимаю Subbutton, она показывает SubWindow со многими вкладками.

Количество табов совпадает с количеством кликов.

Но я хочу, чтобы в одной вкладке были предметы.

И время клика не всегда одинаково.

Как редактировать мой код?

// вид

<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>

// ViewModel

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; }
}

// Codebehind

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 });
    }
}

// SubWindow's View

<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;
    }
}

И есть добавки.

@ Я хочу использовать флажок в качестве элемента в Tab. Так что я не хочу перемен как возможно.

@ Если я могу, я хочу добавить вкладки каждые 5 пунктов. Если вы дадите мне этот код, я очень рад. (Например, page1 содержит item1, 2, 3, 4 и 5. page2 содержит item6, 7 ... и т. Д.)

...