我在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=""
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
并存储AddNewTaskViewModel
和AddNewProjectViewModel
?如何在两个不同的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));
}
答案 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());
}