.net - 如何创建TabControl,以便在每个TabItem切换时呈现不同的数据

标签 .net silverlight mvvm silverlight-5.0 tabcontrol

我想使用MVVM方法创建一个Tabcontrol,其中此Tab将具有3个Tabitem,并且每个选项将呈现不同的内容
就像一个将在其标签内容中呈现一些代码,而另一个tabItem将呈现soem UI元素。

我想到的是:

制作一个mainView.xaml,它将具有这样的TabControl声明:

<UserControl x:Class="CENTER.MainTabControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <controls:TabControl Grid.Row="0" BorderThickness="0" Background="White" />
    </Grid>
</UserControl>

并为每个Tabitem创建一个Viewmodel类,例如XmlRenderViewModel.cs(用于xml渲染)和UIeLementRenderViewmodel.cs(用于UI元素渲染)
(如果我错了,请纠正我)。并需要制作一个UserControl列表(在这种情况下为3 Usercontrol)。

但是如何使用MVVM方法和xaml来实现呢?

可以请人解释一下。非常感谢,我长期以来一直被困在这里。

最佳答案

最终,您希望每个选项卡项都具有自己的数据上下文。这样,您可以为每个选项卡使用单独的 View 模型。设置项目数据上下文的方法有很多。这是一个有关如何执行此操作的简单示例。

<Grid x:Name="LayoutRoot" Background="White">
    <sdk:TabControl Grid.Row="0" BorderThickness="0" Background="White" >
        <sdk:TabItem x:Name="TabItem1">
            <TextBlock Text="{Binding ViewModelText}"></TextBlock>
        </sdk:TabItem>
        <sdk:TabItem x:Name="TabItem2">
            <TextBlock Text="{Binding ViewModelText}"></TextBlock>
        </sdk:TabItem>
    </sdk:TabControl>
</Grid>

然后在MainView.xaml.cs中,您可以拥有此...
public partial class mainView : UserControl
{
    public mainView()
    {
        InitializeComponent();
        TabItem1.DataContext = new TabItemOneViewModel();
        TabItem2.DataContext = new TabItemTwoViewModel();
    }
}

public class TabItemOneViewModel
{
    public string ViewModelText { get; set; }

    public TabItemOneViewModel()
    {
        ViewModelText = "Item one text";
    }
}

public class TabItemTwoViewModel
{
    public string ViewModelText { get; set; }

    public TabItemTwoViewModel()
    {
        ViewModelText = "Item two text";
    }
}

关于.net - 如何创建TabControl,以便在每个TabItem切换时呈现不同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25625463/

相关文章:

c# - 算术是交换律和结合律吗?

c# - 使用 List<> 时使用 ListBox(带有 ItemTemplate)的正确方法

c# - 知道 "Datacontext"何时在 UserControl 的代码隐藏中更改

c# - 调整对象标签大小以适合 silverlight 内容

银光 3.0 : Can't add references beyond v2

.net - 从 Alt-Tab 程序切换器隐藏窗口的最佳方法?

c# - httpwebrequest 中 TCP 连接是如何以及在何处创建的,它与 servicepoint 有何关系?

c# - Prism 如何将模块 View 绑定(bind)到应用程序范围的属性

wpf - MVVM/Prism : Where should dialog box strings be stored?

.net - MVVM Light 的 SimpleIoC 背后是什么