选中 ViewModel 上的复选框时,在 UserControl 上打开新选项卡

Open new Tabs on a UserControl while checking the Checkboxes on a ViewModel

我正在尝试在 MVVM 中制作一个程序,它可以读取 Excel 文件并将内容生成到 Word 文件中。现在,每次有人选择在复选框上创建一个 Word 文件时,我都坚持在 UserControl 上制作新的 Tabs:

它应该在我的第二个 UserControl 上生成一个新选项卡,我试图从我的 ViewModel 生成一个名为 HauptfensterViewModel.

视图模型中的代码如下所示:

protected void OnWeiterExecute(object obj)
{
    OnDokumentChanged();
    new VorschauViewModel(view);
    if (Dokumenttyp[0] == true)
    {
        //TabItem auf VorschauWindow erstellen, mit jeweiligem Dokumentennamen(Angebotsvorlage)
    }
    if (Dokumenttyp[1] == true)
    {
        //TabItem auf VorschauWindow erstellen mit jeweiligem Dokumentennamen(Auditplan)
    }
    if (Dokumenttyp[2] == true)
    {
        //TabItem auf VorschauWindow erstellen mit jeweiligem Dokumentennamen(Checkliste)
    }
    if (Dokumenttyp[3] == true)
    {
        //TabItem auf VorschauWindow erstellen mit jeweiligem Dokumentennamen(Dokumentationsvorlage)
    }               
}

感谢您的帮助,如果有什么不明白的地方,我会尽力回答所有问题。

你可以尝试像下面例子这样的代码,这不是最好的解决方案,但它可以帮助你更多地了解 MVVM.

视图模型:

public class HauptfensterViewModel : INotifyPropertyChanged
{
    public static HauptfensterViewModel Instance { get; } = new HauptfensterViewModel();

    private HauptfensterViewModel()
    {
    }

    private bool _property1;
    private bool _property2;
    private bool _property3;
    private bool _property4;

    public bool Property1
    {
        get { return _property1; }
        set
        {
            _property1 = value;
            OnPropertyChanged();
        }
    }

    public bool Property2
    {
        get { return _property2; }
        set
        {
            _property2 = value;
            OnPropertyChanged();
        }
    }

    public bool Property3
    {
        get { return _property3; }
        set
        {
            _property3 = value;
            OnPropertyChanged();
        }
    }

    public bool Property4
    {
        get { return _property4; }
        set
        {
            _property4 = value; 
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

用户控件 1:

<CheckBox IsChecked="{Binding Property1}"/>
<CheckBox IsChecked="{Binding Property2}"/>
<CheckBox IsChecked="{Binding Property3}"/>
<CheckBox IsChecked="{Binding Property4}"/>

用户控件 2:

<TabControl HorizontalAlignment="Right">
    <TabControl.Resources>
        <BooleanToVisibilityConverter x:Key="ToVisibilityConverter"/>
    </TabControl.Resources>
    <TabItem Header="1" Visibility="{Binding Property1,Converter={StaticResource ToVisibilityConverter}}"/>
    <TabItem Header="2" Visibility="{Binding Property2,Converter={StaticResource ToVisibilityConverter}}"/>
    <TabItem Header="3" Visibility="{Binding Property3,Converter={StaticResource ToVisibilityConverter}}"/>
    <TabItem Header="4" Visibility="{Binding Property4,Converter={StaticResource ToVisibilityConverter}}"/>
</TabControl>

代码隐藏:

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        DataContext = HauptfensterViewModel.Instance;
    }
}
public partial class UserControl2 : UserControl
{
    public UserControl2()
    {
        DataContext = HauptfensterViewModel.Instance;
    }
}