如何解决使用 TabControl (MVVM)
我编写了一个具有不同 viewmodel 的应用程序,一个用于用户、组和机器。每个 viewmodel 都有自己的 View。我正在使用 Caliburn.Micro。 现在我像这样在带有按钮的视图之间切换:
XAML:
<StackPanel Orientation="Horizontal">
<Button VerticalAlignment="Top" Margin="5" Height="30" x:Name="ShowUsers" Content="Users"/>
<Button VerticalAlignment="Top" Margin="5" Height="30" x:Name ="ShowGroups" Content="Groups"/>
<Button VerticalAlignment="Top" Margin="5" Height="30" x:Name ="ShowMachines" Content="Machines"/>
</StackPanel>
<ContentControl Grid.Row="1" x:Name="ActiveItem"/>
C#:
public Adminviewmodel(GroupManagementviewmodel groupManagementviewmode,MachineManagementviewmodel machineManagementviewmodel,UserManagementviewmodel userManagementviewmodel)
{
this._groupManagementviewmodel = groupManagementviewmode;
this._machineManagementviewmodel = machineManagementviewmodel;
this._userManagementviewmodel = userManagementviewmodel;
}
protected override void OnActivate()
{
base.OnActivate();
ShowUsers();
}
public void ShowUsers()
{
ActivateItem(_userManagementviewmodel);
}
public void ShowGroups()
{
ActivateItem(_groupManagementviewmodel);
}
public void ShowMachines()
{
ActivateItem(_machineManagementviewmodel);
我想使用 TabControl 更改这些按钮,我尝试了几件事,现在我的代码如下所示:
XAML(带 Tabcontrol):
<TabControl>
<TabItem Header="User" x:Name="ShowUsers">
</TabItem>
<TabItem Header="Groups" x:Name="ShowGroups">
</TabItem>
<TabItem Header="Machines" x:Name="ShowMachines">
</TabItem>
</TabControl>
<ContentControl Grid.Row="1" x:Name="ActiveItem"/>
所以我在我的 viewmodel 中给了 TabItems 命令的 x:Name 但它只为每个 TAB 显示相同的视图模型
最好的问候
赞
解决方法
TabControl 元素有一个 ItemSource 属性,可以用来完成这项工作。例如:
您可以将 ItemSource 绑定到一个类型的可观察集合,该集合是您要在选项卡控件中使用的所有三个视图模型的基类:
public ObservableCollection<BaseViewModel> TabControlViewModels { get; }
ItemSource 将绑定到此。
查看 TabControl (ItemsControl) 可能对诸如 SelectedIndex、ItemsPanel、ItemTemplate 和 ItemContainerStyle 之类的事情有所帮助,以使其看起来像您想要的那样。
另请参阅此处了解更多详情:How do I bind a TabControl to a collection of ViewModels?
,使用 Caliburn.Micro,视图中的 XAML 标记应该像这样简单:
<TabControl x:Name="Items" />
然后视图模型应该从 Conductor<T>.Collection.OneActive
继承并将选项卡视图模型添加到 Items
属性:
public class AdminViewModel : Conductor<object>.Collection.OneActive
{
public AdminViewModel(GroupManagementViewModel groupManagementViewMode,MachineManagementViewModel machineManagementViewModel,UserManagementViewModel userManagementViewModel)
{
Items.Add(groupManagementViewMode);
Items.Add(machineManagementViewModel);
Items.Add(userManagementViewModel);
}
}
标签视图模型应该继承自 Screen
。然后您可以设置它们的 DisplayName
属性来修改标签页眉。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。