C# wpfmvvm中的动态TabControl
几周前我开始使用WPF(在C#中),现在我需要一些关于tabcontrol高级使用的帮助 首先,我使用MVVM(Model-View-ViewModel)模式来设计我的应用程序,我有一个限制,就是尽量不在代码隐藏文件(inititalisexaml文件)中添加代码 现在我的问题是在我的主窗口视图(Window)中动态创建新的tabItems,当我点击一个按钮(“new Tab”按钮)时,它会显示我的详细视图(页面)的一个实例C# wpfmvvm中的动态TabControl,c#,wpf,xaml,tabcontrol,tabitem,C#,Wpf,Xaml,Tabcontrol,Tabitem,几周前我开始使用WPF(在C#中),现在我需要一些关于tabcontrol高级使用的帮助 首先,我使用MVVM(Model-View-ViewModel)模式来设计我的应用程序,我有一个限制,就是尽量不在代码隐藏文件(inititalisexaml文件)中添加代码 现在我的问题是在我的主窗口视图(Window)中动态创建新的tabItems,当我点击一个按钮(“new Tab”按钮)时,它会显示我的详细视图(页面)的一个实例 我在网上找到了很多关于动态创建的东西,但是经常会在代码隐藏文件中进行修
我在网上找到了很多关于动态创建的东西,但是经常会在代码隐藏文件中进行修改。我想使用绑定,但我不知道如何对这类东西使用绑定。您可以绑定到表示选项卡项集合的
TabControl
属性的ItemsSource
。然后,您可以从ViewModel中操作集合。MVVM将帮助您解决此问题
为主窗口视图创建视图模型。你可以在那里收藏
详细视图模型。只需在此处使用DetailViewModels的ObservableCollection
在您的视图中,将TabControl
的ItemsSource
绑定到该集合
AddTab按钮可以具有命令绑定。该命令可以是ICommand
在MainWindowViewModel中发布的派生类。按下按钮
然后在主窗口ViewModel中结束,添加另一个DetailViewModel和
以这种方式更新视图
请在此处查看MVVM上的优秀视频教程:
他解释了如何实现这一点,并举例说明了主要视图模型和详细视图模型
和命令
他在视频中开发的源代码可在此处获得:
也许创建刚刚使用的ViewModel更容易
通过选项卡Control
。将TabControl
的DataContext
设置为该值
TabControlViewModel。将该TabControlViewModel发布到
MainWindowViewModel作为公共属性,以实现这一点
您的代码将是空的,可能除了一些初始化组件。Sacha Barber关于MVVM的大量文章包含可下载的应用程序,他在其中公开了使用tab控件创建动态视图的方法。您可以下载本文附带的演示应用程序,了解如何使用动态选项卡控件。
例如:
您需要在哪里绑定表示选项卡内容的数据模型的工作区集合,如果需要,还需要为选项卡添加属性,例如是否可关闭、是否已禁用、名称等。这可以是您的ViewModelBase。创建选项卡项模板以支持视图模型
<TabControl x:Name="tabControl"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding Path=Workspaces}"
Template="{StaticResource DynamicTabControlTemplate}">
</TabControl>
初始化工作区集合,例如
工作空间=新的ObservableCollection()
在您向“收藏”选项卡添加新项目后,控件也将更改。您使用了什么进行绑定?已更改依赖项属性或InotifyProperty。Personnal目前我在项目中使用第二个,但我仍然不知道哪一个更好。只要可能,我就使用
INotifyPropertyChanged
。我已经对代码进行了修改,效果很好。当我点击“新建选项卡”按钮时,会出现一个新选项卡,但在该选项卡中,我看不到我的详细信息视图,而是一个带有我的详细信息视图模型名称的文本行。我想我已经忘记了DetailView中的datacontext,但是没有。所以我不知道。你有什么想法吗?你的DetailView应该是什么样子?目前我也不知道。我的详细视图是某种形式。带有标签、文本字段和按钮的网格。