Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Prism-视图导航仅在初始化时工作一次_C#_Wpf_Prism - Fatal编程技术网

C# Prism-视图导航仅在初始化时工作一次

C# Prism-视图导航仅在初始化时工作一次,c#,wpf,prism,C#,Wpf,Prism,我不熟悉使用棱镜框架 我设置了我的应用程序,一切正常。然而,现在我正试图用一个模块来分离这两个区域 现在,一旦我导航到第二个区域中的任何视图,我就不能再导航到该区域中的任何其他视图 代码如下: public void OnInitialized(IContainerProvider containerProvider) { _regionManager = containerProvider.Resolve<IRegionManager>();

我不熟悉使用棱镜框架

我设置了我的应用程序,一切正常。然而,现在我正试图用一个模块来分离这两个区域

现在,一旦我导航到第二个区域中的任何视图,我就不能再导航到该区域中的任何其他视图

代码如下:

    public void OnInitialized(IContainerProvider containerProvider)
    {
        _regionManager = containerProvider.Resolve<IRegionManager>();

        _regionManager.RequestNavigate("ContentRegion", "ClientWindow");

        _factory.BuildString(
            "Model[System.Mode]",
            OnModeChanged);
    }

    public void RegisterTypes(IContainerRegistry containerRegistry)
    {
        containerRegistry.RegisterForNavigation<ClientWindow>();
        containerRegistry.RegisterForNavigation<AnyGame>();
        containerRegistry.RegisterForNavigation<LockupControl>();
        containerRegistry.RegisterForNavigation<MenuControl>();

        Configuration configuration = new Configuration("TargetApplication", Environment.GetCommandLineArgs());
        _model = new ModelManager();
        Listener listener = new Listener(
            configuration.ModelClient,
            connected => ClientConnectionChanged(connected));
        _factory = new BindingFactory(_model);

        containerRegistry.RegisterInstance(configuration);
        containerRegistry.RegisterInstance(_model);
        containerRegistry.RegisterInstance(listener);
        containerRegistry.RegisterInstance(_factory);
    }

    /// <summary>
    /// Handle a connection changed notification on the main UI thread.
    /// </summary>
    /// <param name="connected">True if connected.</param>
    private void ClientConnectionChanged(bool connected)
    {
        if (connected)
        {
            _model.Reset();
        }
        else
        {
            _model.ProcessDisconnected();
        }
    }

    private void OnModeChanged(string mode)
    {
        switch (mode)
        {
            default:
            case "Game":
                _regionManager.RequestNavigate("ClientRegion", "AnyGame");
                break;
            case "Lockup":
                _regionManager.RequestNavigate("ClientRegion", "LockupControl");
                break;
            case "Menu":
                _regionManager.RequestNavigate("ClientRegion", "MenuControl");
                break;
        }
    }
public void初始化(IContainerProvider containerProvider)
{
_regionManager=containerProvider.Resolve();
_RequestNavigate(“ContentRegion”、“ClientWindow”);
_factory.BuildString(
“模型[系统模式]”,
无模式改变);
}
公共无效注册表类型(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation();
containerRegistry.RegisterForNavigation();
containerRegistry.RegisterForNavigation();
containerRegistry.RegisterForNavigation();
配置=新配置(“TargetApplication”,Environment.GetCommandLineArgs());
_model=newmodelmanager();
侦听器=新侦听器(
configuration.ModelClient,
connected=>ClientConnectionChanged(connected));
_工厂=新绑定工厂(\u模型);
containerRegistry.RegisterInstance(配置);
containerRegistry.RegisterInstance(_模型);
containerRegistry.RegisterInstance(侦听器);
containerRegistry.RegisterInstance(_工厂);
}
/// 
///在主UI线程上处理连接更改通知。
/// 
///如果已连接,则为True。
私有无效客户端连接已更改(布尔连接)
{
如果(已连接)
{
_model.Reset();
}
其他的
{
_model.ProcessDisconnected();
}
}
模式更改时的专用void(字符串模式)
{
开关(模式)
{
违约:
案例“游戏”:
_regionManager.RequestNavigate(“ClientRegion”、“AnyGame”);
打破
“禁闭”一案:
_regionManager.RequestNavigate(“ClientRegion”、“LockupControl”);
打破
案例“菜单”:
_RequestNavigate(“ClientRegion”、“MenuControl”);
打破
}
}
OnModeChanged方法是随着游戏模式的改变,我尝试导航到不同的视图。我在我的代码中加入了一些断点,以确保我正确地到达RequestNavigate方法。第一个RequestNavigate按预期工作,但是在我调用这些方法之后,它们什么都不做


任何帮助都将不胜感激。:)谢谢

我已经解决了这个问题

OnModeChanged方法试图导航到视图模型,而没有对线程的正确访问权限

private void OnModeChanged(string mode)
    {
        if (Application.Current.Dispatcher != null)
        {
            Application.Current.Dispatcher.BeginInvoke(
                DispatcherPriority.Background,
                new Action(
                    () =>
                    {
                        switch (mode)
                        {
                            default:
                            case "Game":
                                _regionManager.RequestNavigate("GameRegion", "AnyGame");
                                break;
                            case "Lockup":
                                _regionManager.RequestNavigate("GameRegion", "LockupControl");
                                break;
                            case "Menu":
                                _regionManager.RequestNavigate("GameRegion", "MenuControl");
                                break;
                        }
                    }));
        }
    }
这段代码显示了问题的一个简单解决方案,我只是将我想要执行的代码包装到调度程序上的一个操作中