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;
}
}));
}
}
这段代码显示了问题的一个简单解决方案,我只是将我想要执行的代码包装到调度程序上的一个操作中