1

我在 shell 中定义了两个区域:MainRegion 和 ToggleRegion。切换区域包含一个按钮,单击该按钮我想更改主区域中的区域。

这是我在 shell 中注册区域的 xaml 代码。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" ></RowDefinition>
        <RowDefinition Height="30"></RowDefinition>
    </Grid.RowDefinitions>

    <ContentControl Grid.Row="0" Regions:RegionManager.RegionName="MainRegion"></ContentControl>
    <ContentControl Grid.Row="1" Regions:RegionManager.RegionName="ToggleRegion"></ContentControl>

</Grid>

我的 Bootstrapper 添加 MainModule 我在 Region 中注入视图的位置

  protected override IModuleCatalog CreateModuleCatalog()
    {
        var catalog = new ModuleCatalog();
        catalog.AddModule(typeof (MainModule));
                   return catalog;
    }

我的 MainModule 类

 public void Initialize()
    {
        regionManager.RegisterViewWithRegion("MainRegion", typeof(MainView));
        regionManager.RegisterViewWithRegion("ToggleRegion", typeof(ToggleView));

     }

在运行应用程序时,我可以看到 MainRegion 和 ToggleRegion 中加载了 MainView 和 ToggleView。但是当我单击切换区域中的按钮以更改主区域中的视图时。主要区域视图没有改变。

我的按钮单击事件中的代码

{
     IRegion region = regionManager.Regions["MainRegion"];

        var view = region.Views.SingleOrDefault();
        region.Remove(view);
        regionManager.RegisterViewWithRegion("MainRegion", typeof(ViewOnButtonClick));
        region.Activate(view);

}

在调试时,我可以看到区域首先删除 MainView,然后激活 viewonbuttonclick,但同样没有反映在我的 xaml 视图中。

我错过了什么?

4

2 回答 2

0

I think the problem is here

var view = region.Views.SingleOrDefault();
    region.Remove(view);
    regionManager.RegisterViewWithRegion("MainRegion", typeof(ViewOnButtonClick));
    region.Activate(view);

What I would do is register all the views upfront..

regionManager.RegisterViewWithRegion("MainRegion", typeof(MainView));
regionManager.RegisterViewWithRegion("ToggleRegion", typeof(ToggleView));
regionManager.RegisterViewWithRegion("MainRegion", typeof(ViewOnButtonClick));

and then instead of removing a view from the region get the view by the view name you've given it.. and then activate

      var view = region.Views.SingleOrDefault(v => v != null && v.GetType() == typeof     (ViewOnButtonClick); 

      region.Activate(view);
于 2012-12-09T07:46:51.150 回答
0

问题出在我的引导程序类上。我是这样启动应用程序的:-

protected override DependencyObject CreateShell()
    {
        Shell shell = new Shell();
       Application.Current.MainWindow = null;
       Application.Current.StartupUri = new Uri("Shell.xaml", UriKind.RelativeOrAbsolute);
       return (DependencyObject)shell;
    }

使用 shell.show() 而不是 current.startupuri 允许我更改按钮单击时的视图。

于 2012-12-09T10:27:25.860 回答