如何使用Caliburn.Micro和不同的UserControls制作TabControl

时间:2019-05-23 12:26:32

标签: c# wpf xaml caliburn.micro

我在TabControl上遇到问题,甚至都不知道如何开始。

我有一个名为MainViewModel的根视图。 Csharp类看起来像这样:

public class MainWindowViewModel : Conductor<IScreen>.Collection.OneActive
{
    //i have couple of ToggleButtons to load diffrent UserControls, LoadAddNewPage 
    //is one of them
    public void LoadAddNewPage() => this.ActivateItem(new AddNewTaskViewModel(params));
}

我在ToggleButton中有MainWindowView.XAML个正在加载LoadAddNewTaskPage

<ToggleButton x:Name="LoadAddNewPage"               
            Grid.Column="4"
            Width="50" Height="50" 
            Content="&#xf067;" 
            Foreground="White" 
            BorderThickness="0"  
            BorderBrush="{x:Null}" 
            Background="#FF085078" Margin="20,3,0,3" Grid.ColumnSpan="3">
       <!-- i deleted data triggers here -->
    </ToggleButton>

如您在上面看到的,它加载AddNewTaskViewModel的表单以将新项目添加到我的数据库/列表(或其他内容)中。

AddNewTaskView.xaml很简单,UserControl带有文本框等。

我的问题是,如何准备我的LoadAddNewPage按钮以向TabControl加载两个UserControler?现在,我正在加载new AddNewTaskViewModel()(它是UserControl,它可以按我的意愿正确地加载)。如何用TabControl制作Caliburn.Micro并存储AddNewTaskViewModelAddNewProjectViewModel?如何在两个不同的TabControl之间切换UserControl?我有一个开始的问题,因为我不知道如何开始这个问题。感谢您的任何建议

编辑

在这里,我将展示我的完整ViewModel

 public class MainWindowViewModel : Conductor<IScreen>.Collection.OneActive
{
    protected override void OnViewLoaded(object view) => Show.LoginBox(this.loggedUser);

    public void LoadUserInfoPage() => this.ActivateItem(new UserInfoViewModel(this.loggedUser));

    public void LoadTaskManagerPage() => this.ActivateItem(new TaskManagerViewModel(this.loggedUser, this.repository));

    public void LoadNotificationsPage() => this.ActivateItem(new NotificationsViewModel(this.repository));

    //here, i want to trigger TabControl with two VMs to choose
    public void LoadAddNewTaskPage() => this.ActivateItem(new AddNewTaskViewModel(this.loggedUser, this.repository));
}

EDIT2

我了解了背景,但是我想实现:

再创建一个Vm类,它将存储我要在User Controls中使用的TabControl

public class TabControlViewModel 
{
    //how to store two VMs that i will use to my TabControl here?
}

MainViewModel中:

public class MainWindowViewModel : Conductor<IScreen>.Collection.OneActive
{
    //activate TabControlViewModel that will store AddTaskVM and AddProjectVM
    //this vm will display on my `TabControl` in xaml in `MainWindowView.xaml`
    public void LoadAddNewPage() => this.ActivateItem(new TabControlViewModel(params));
}

1 个答案:

答案 0 :(得分:1)

在视图中添加一个名为“项”的TabControl

<TabControl x:Name="Items" />

...以及将另一种类型的Button添加到Screen集合中的另一种Items和方法:

public class MainWindowViewModel  : Conductor<IScreen>.Collection.OneActive
{
    public void LoadAddNewTask() => this.ActivateItemAsync(new AddNewTaskViewModel());
    public void LoadAddNewProject() => this.ActivateItemAsync(new AddNewProjectViewModel());
}