0

スプラッシュ画面で始まる Prism アプリケーションがあり、その後スタート ビューに変更する必要があります。これを実現したいと思っていたモジュールの Initialize メソッドのコードを次に示します。

  public void Initialize() {

     RegisterViewsAndServices();

     //_manager.RegisterViewWithRegion(RegionNames.Content, typeof(ToolboxSplashView));

     var vmSplash = _unityContainer.Resolve<IToolboxSplashViewModel>();
     IRegion region = _regionManager.Regions[RegionNames.Content];
     region.Add(vmSplash.View);

     var vmStart = _unityContainer.Resolve<IToolboxStartViewModel>();
     region.Deactivate(vmSplash.View);
     region.Add(vmStart.View);
  }

残念ながら、これを実行すると、スタート ビューしか表示されません。スタート ビュー (コードの最後の段落) をコメント アウトすると、スタート画面とアニメーションが表示されます。アニメーションが完了したことを検出して、スプラッシュ ビューからスタート ビューに変更するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

2

AggregateEvent を使用してアニメーションが完了したことを通知し、制御クラスがその集約イベント通知を受信したときにコードの 2 番目の部分を実行するようにします。

public void Initialize()
{
     RegisterViewsAndServices();

     IEventAggregator ea = _unityContainer.Resolve<IEventAggregator>();
     ea.GetEvent<WhateverEvent>().Subscribe(NavigateNext);

     var vmSplash = _unityContainer.Resolve<IToolboxSplashViewModel>();
     IRegion region = _regionManager.Regions[RegionNames.Content];
     region.Add(vmSplash.View);
}

public void NavigateNext(object someParam)
{
    //Navigation Code
     var vmSplash = _unityContainer.Resolve<IToolboxSplashViewModel>();
     var vmStart = _unityContainer.Resolve<IToolboxStartViewModel>();
     region.Deactivate(vmSplash.View);
     region.Add(vmStart.View);
}

//Shared code section (that both modules have access to)
public class WhateverEvent : CompositePresentationEvent<object> { }

//In your splash screen you will use the following line of code to publish
ea.GetEvent<WhateverEvent>().Publish(null);
于 2012-02-22T21:48:05.823 に答える
0

スプラッシュ ビューとスタート ビューは同じモジュールにあります。スプラッシュ ビューのコード ビハインドで、Completed イベント ハンドラー (@michael のコメントを参照) をフックしました。モジュールの初期化では、スプラッシュ ビューのみが開始されるようになりました。

  public void Initialize() {

     RegisterViewsAndServices();

     var vmSplash = _unityContainer.Resolve<IToolboxSplashViewModel>();
     var region = _regionManager.Regions[RegionNames.Content];
     region.Add(vmSplash.View);
  }

Completed イベントを示すストーリーボード Xaml:

  <EventTrigger RoutedEvent="Image.Loaded">
     <BeginStoryboard>
        <Storyboard Completed="StoryboardSplashCompleted">
           <DoubleAnimation
              Storyboard.TargetName="slamDunkImage" 
              Storyboard.TargetProperty="Opacity"
              From="0.0" To="1.0"
              Duration="0:0:2" 
              AutoReverse="True" />
        </Storyboard>
     </BeginStoryboard>
  </EventTrigger>

コード ビハインド、イベント ハンドラー:

  private void StoryboardSplashCompleted(object s, EventArgs args) {
     _regionManager.RequestNavigate(RegionNames.Content, typeof(ToolboxStartView).FullName);
  }

ToolboxStartView は同じモジュールにあるため、外部依存関係は必要ありません。

シェルはナビゲーション リクエストを処理し、ビューを切り替えます。Prism ダウンロードの一部である Prism.chm ヘルプ ファイルには、第 8 章のビュー ベースのナビゲーションに関する記述があります。 ViewModel ファーストではありません。

于 2012-02-24T15:32:12.377 に答える