1

シェルで MainRegion と ToggleRegion の 2 つの領域を定義しています。トグル領域には、そのボタンをクリックすると、メイン領域の領域を変更したいボタンが含まれています。

これは、シェルに領域を登録するための私の 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を追加します

  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 ビューに反映されていません。

何が欠けていますか?

4

2 に答える 2

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);
于 2012-12-09T07:46:51.150 に答える
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;
    }

current.startupuriの代わりにshell.show()を使用すると、ボタンクリックでビューを変更できます。

于 2012-12-09T10:27:25.860 に答える