我有一个TabControl,我使用regionManager.RequestNavigate方法加载多个视图。 所有视图都具有相同的类型。
每个TabItem的标题都有一个按钮,我想用它在按下时删除视图,使用以下代码:
regionManager.Regions["MainContentRegion"].Remove(view)
我的问题是我不知道如何获取包含在viewmodel中按下的按钮的视图实例。这并不总是TabControl的Active视图,但也可以是非活动视图,因为按钮位于每个TabItem的Header中。
另外,我找不到在RequestNavigate方法中设置视图名称的方法......
非常感谢任何帮助!
答案 0 :(得分:0)
我找到了解决问题的方法。 我所做的是将视图本身作为Button Command的参数传递。我在MainWindow.xaml中的样式中定义了TabItem标头的DataTemplate 标题由ContentControl和Button组成。下面的代码将按钮的命令绑定到将加载到TabItem的View的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}}}">
管理按钮单击的代码在View的ViewModel中定义,ViewModel是在动态加载的Module中定义的。 在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);
}