这使我发疯。我试图对地区做最基本的事情。在我看来,我有一个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中没有任何更改,因此可以看到相同的视图。我在做什么错了?
编辑:
所有涉及的视图都有prism:ViewModelLocator.AutoWireViewModel="True"
,所有视图模型都来自bindablebase。这或多或少是Basic Navigation example on prisms github
答案 0 :(得分:0)
请在RegisterForNavigation
方法调用中删除可选的“ name”参数。这将允许PRISM在视图类型和视图的唯一标识符/键之间进行默认映射。
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<ActiveOrdersView>();
containerRegistry.RegisterForNavigation<SearchAccountsView>();
}
如果您仍想提供自定义的唯一标识符/键作为方法参数,请使用RegisterTypeForNavigation
方法来覆盖默认注册:
protected override void RegisterTypes()
{
Container.RegisterTypeForNavigation<SearchAccountsView>("CustomKey");
}
有关更多详细信息和示例,请参见PRISM文档中的the following page。