棱镜访问视图实例 TabControl

Prism Access View Instance TabControl

我有一个 TabControl,我在其中使用 regionManager.RequestNavigate 方法加载多个视图。 所有视图都具有相同的类型。

每个 TabItem 的 Header 都有一个按钮,我想在按下它时使用它来删除视图,代码如下:

regionManager.Regions["MainContentRegion"].Remove(view)

我的问题是我不知道如何获取包含在视图模型中按下的按钮的视图实例。这并不总是 TabControl 的活动视图,但也可以是非活动视图,因为按钮位于每个 TabItem 的页眉中。

此外,我找不到在 RequestNavigate 方法中设置视图名称的方法...

非常感谢任何帮助!

我找到了解决问题的办法。 我所做的是将视图本身作为按钮命令的参数传递。我在 MainWindow.xaml 中的样式中定义了 TabItem Header 的 DataTemplate Header 由一个 ContentControl 和一个 Button 组成。按照将按钮的命令绑定到将加载到 TabItem 中的视图的 ViewModel 中定义的事件的代码。 TabItem 的内容是作为 CommandParameter 传递的实际视图:

<Button Command="{Binding DataContext.DataContext.CloseViewCommand, RelativeSource={RelativeSource  AncestorType={x:Type TabItem}}}" CommandParameter="{Binding Content, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TabItem}}}">

管理按钮点击的代码在视图的 ViewModel 中定义,即在动态加载的模块中定义。 在 ViewModel 中,我可以使用以下代码简单地从区域中删除视图:

public DelegateCommand<object> CloseViewCommand
        {
            get
            {
                if (_closeViewCommand == null)
                    _closeViewCommand = new DelegateCommand<object>(CloseView);
                return _closeViewCommand;
            }
        }
private void CloseView (object view)
        {

            if (_regionManager.Regions[MainWindowRegions.MainContentRegion].Views.Contains(view))
                _regionManager.Regions[MainWindowRegions.MainContentRegion].Remove(view);
        }