2012-12-09 66 views
1

我在shell中定义了两个区域:MainRegion和ToggleRegion。切换区域包含一个按钮,点击那个按钮我想改变主区域的区域。棱镜:壳区域视图更改不反映在xaml视图

这里是我在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> 

我的引导程序添加MainModule我在哪里的地区

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)); 

    } 

注射视图上运行的应用程序,我能看到的MainView和ToggleView在MainRegion和ToggleRegion装。但是当我点击切换区域中的按钮来改变主区域中的视图。主要区域视图不变。

代码在我的按钮单击事件

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

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

}

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

我错过了什么?

回答

0

我认为这个问题是在这里

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

我会做的是登记所有前期的观点..

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

,然后取出,而不是从区域的图的获取由视图视图名称你给它..然后激活

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

     region.Activate(view); 
+0

早些时候我也是这样做的,但也没有给出我的结果。事实上,当我停在只是region.Remove(查看)在主区域内没有视图。地区没有看到空,但同样没有反映在我的XAML壳。这真让我抓狂。 – Sunil

0

问题是我的Bootstrapper类。我启动应用程序是这样的: -

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让我改变按钮点击美景。