2

几周前我开始使用 WPF(在 C# 中),现在我需要一些高级使用 tabcontrol 的帮助。

首先,我使用 MVVM(模型视图视图模型)模式来设计我的应用程序,并且我有一个约束,即尽量不在代码隐藏文件中添加代码(即初始化 xaml 文件)。

现在我的问题是在我的主窗口视图(窗口)中动态创建新的 tabItems,当我单击一个按钮(例如“新选项卡”按钮)时,它会显示我的详细视图(页面)的一个实例。

我在网上发现了很多关于动态创建 tabitem 的东西,但通常在文件后面的代码中进行了修改。我虽然使用绑定,但我不知道如何使用绑定到这种东西。

4

3 回答 3

3

MVVM 将帮助您。

为您的 MainWindow 视图创建一个 ViewModel。在那里你可以有一个 DetailViewModels 的集合。只需在此处使用ObservableCollectionDetailViewModels 即可。

在您的视图中,将 的 绑定ItemsSourceTabControl该集合。

您的 AddTab 按钮可以有一个命令绑定。该命令可以是ICommand 在 MainWindowViewModel 中发布的派生类。按下按钮然后在 MainWindow ViewModel 中结束,添加另一个 DetailViewModel 并以这种方式更新 View。

在这里查看这个关于 MVVM 的优秀视频教程:Jason Dollinger on MVVM

他通过 Main 和 Detail ViewModel 和命令的示例解释了如何做到这一点。

他在视频中开发的源代码可在此处获得:Lab49 上的源代码

或许更容易创建一个仅由TabControl. 然后将 的 设置DataContextTabControl那个 TabControlViewModel 。将您的 MainWindowViewModel 中的 TabControlViewModel 作为公共属性发布,以完成此操作。

您的代码隐藏将是空的,除了一些 InitializeComponent 可能。

于 2012-07-24T06:20:54.347 回答
2

Sacha Barber 撰写的关于 MVVM 的大量文章包含可下载的应用程序,他在其中公开了使用选项卡控件创建动态视图的方式您可以下载文章附带的演示应用程序,以了解如何使用动态选项卡控件。例子:

您需要在哪里绑定代表选项卡内容数据模型的工作区集合,以及是否需要为选项卡添加属性,例如可关闭与否、禁用与否、名称等。这可以是您的 ViewModelBase。创建您的选项卡项目模板以支持您的视图模型。

<TabControl x:Name="tabControl"
                 IsSynchronizedWithCurrentItem="True" 
                 ItemsSource="{Binding Path=Workspaces}" 
                 Template="{StaticResource DynamicTabControlTemplate}">         
</TabControl>

例如像这样初始化工作空间的集合

工作区 = 新的 ObservableCollection();

并且在您将新项目添加到集合选项卡控件后,也会更改。

于 2012-07-24T06:34:20.367 回答
1

您可以绑定到表示选项卡项集合的ItemsSourcea 的属性。TabControl然后你可以从你的 ViewModel 操作集合。

于 2012-07-24T06:17:44.573 回答