这让我抓狂。我试图用区域做最基本的事情。在我的视图中,我有一个contentregion和两个视图。我想在启动时显示一个,在点击按钮时显示另一个。
这是我的模块代码
public void OnInitialized(IContainerProvider containerProvider)
{
var regionManager = containerProvider.Resolve<IRegionManager>();
regionManager.RegisterViewWithRegion(Navigation.Regions.SearchHolderRegion, typeof(ActiveOrdersView)); //startup view for search
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<ActiveOrdersView>("ActiveOrdersView");
containerRegistry.RegisterForNavigation<SearchAccountsView>("SearchAccountsView");
}
这是我的看法
<StackPanel>
<TextBlock Text="Seach holder"/>
<Button Content="Open view" Command="{Binding OpenViewCommand}"/>
<ContentControl prism:RegionManager.RegionName="SearchHolderRegion" />
</StackPanel>
public class SearchHolderViewModel : BindableBase
{
IRegionManager _regionManager;
public DelegateCommand OpenViewCommand { get; set; }
public SearchHolderViewModel(IRegionManager regionManager)
{
_regionManager = regionManager;
OpenViewCommand = new DelegateCommand(OpenViewCommandHandler);
}
private void OpenViewCommandHandler()
{
_regionManager.RequestNavigate("SearchHolderRegion", "SearchAccountsView");
}
}
第一个视图显示正常。但当我点击按钮时,我进入处理程序并调用RequestNavigate(...),但在GUI中没有任何变化,同样的视图是可见的。我到底做错了什么?
EDIT: 所有涉及的视图都有 prism:ViewModelLocator.AutoWireViewModel="True"
所有的viewmodels都来自于bindablebase。这或多或少是对 棱镜上的基本导航示例 github
请删除 "name "这个可选的参数。RegisterForNavigation
方法的调用,这将允许PRISM在视图类型和视图的唯一标识符key之间做一个默认的映射。这将允许PRISM在视图类型和视图的唯一标识符key之间做一个默认的映射。
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<ActiveOrdersView>();
containerRegistry.RegisterForNavigation<SearchAccountsView>();
}
如果你仍然想提供一个自定义的唯一标识符key作为一个方法参数,请你用 RegisterTypeForNavigation
方法来覆盖默认注册。
protected override void RegisterTypes()
{
Container.RegisterTypeForNavigation<SearchAccountsView>("CustomKey");
}
参见 下一页 PRISM文档中的更多细节和示例。