ContentControl中的基本导航

时间:2020-06-08 06:33:03

标签: .net wpf prism

这使我发疯。我试图对地区做最基本的事情。在我看来,我有一个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

的副本

1 个答案:

答案 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