我使用Prism RegionManager
,在TabControl
内的MainView
区域注册不同的观看次数。
MainView.xaml
<TabControl regions:RegionManager.RegionName="MainViewTabRegion">
<TabControl.ItemTemplate>
<DataTemplate>
<DockPanel Width="Auto">
<Button Command="{Binding DataContext.DataContext.CloseTabCommand, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}"
Content="X"
Cursor="Hand"
DockPanel.Dock="Right"
Focusable="False"
FontFamily="Courier"
FontWeight="Bold"
Margin="4,0,0,0"
FontSize="10"
VerticalContentAlignment="Center"
Width="15" Height="15" />
<ContentPresenter Content="{Binding DataContext.DataContext.HeaderText, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}" />
</DockPanel>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
在MainViewViewModel中我用相同的基类添加不同的视图。
MainViewViewModel.cs:
private void AddProjectView() {
var view = _container.Resolve<ProjectSettingsView>();
var dataContext = _container.Resolve<ProjectSettingsViewModel>();
dataContext.HeaderText = "test header txt";
view.DataContext = dataContext;
_regionManager.RegisterViewWithRegion("MainViewTabRegion", () => view);
}
我可以在视图中添加新的标签项。
如何关闭标签项,上面XAML代码中的<TabControl.ItemTemplate>
,在CloseCommand
中添加一个ProjectSettingsViewModel
的关闭按钮,TabItem与其绑定。
ProjectSettingsViewModel.cs
private void OnExecuteCloseCommand(object tabItem) {
//Close this TabItem
}
答案 0 :(得分:5)
将CommandParameter
的{{1}}属性绑定到Button
的{{1}}:
DataContext
然后,您可以在视图模型中删除这样的视图:
TabItem
答案 1 :(得分:3)
您只需要获取对IRegionManager的引用。然后,您将获得视图所属的Region,并在区域上调用Remove并传递tabItem引用以将其删除。
例如:
private void OnExecuteCloseCommand(object tabItem) {
regionManager.Regions["MainViewTabRegion"].Remove(tabItem);
}
您实际上可以将它放在MainViewViewModel中并在DataTemplate中绑定它,然后您不必为每个标签项的视图模型重写close命令。
答案 2 :(得分:1)
我在我的Pluralsight课程&#34; Prism Problems&amp; amp;解决方案:掌握Tab控件&#34;。您可以在此处查看解决方案:https://app.pluralsight.com/library/courses/prism-mastering-tabcontrol/table-of-contents
基本上,您只需要创建一个TriggerAction,它可以为您完成所有工作。简单。虚拟机无需任何操作。