2016-04-05 16 views
1

App.cs.xでスプラッシュ画面を作成しています。私が使用するときSplashWorker.RunWorkerAsync(); DataTemplateは現れません。
このコードに注釈を付けると、DataTemplateが表示されました....DataTemplateがApplication_Startupに表示されない

ViewModelとResourceDictionaryが正しく登録されています。

App.xaml

<Application .......... Startup="Application_Startup"> 


App.cs

private void Application_Startup(object sender, StartupEventArgs e) 
{ 
    this.ShutdownMode = ShutdownMode.OnExplicitShutdown; 

    SplashWindow sw = new SplashWindow(); 

    sw.Closed += (ss, ee) => 
    { 
     if (ServiceLocator.Current.GetInstance<SplashViewModel>().ClosedByUser) 
     { 
      this.Shutdown(); 
     } 
     ServiceLocator.Current.GetInstance<SplashViewModel>().Cleanup(); 
     sw = null; 
    }; 

    if ((bool)sw.ShowDialog()) 
    { 
     this.ShutdownMode = ShutdownMode.OnMainWindowClose; 
     MainWindow = new MainWindow(); 
     MainWindow.Show(); 
    } 
} 

SplashViewModel.cs

public SplashViewModel() 
{ 
    SplashWorker = new BackgroundWorker(); 
    SplashWorker.WorkerSupportsCancellation = true; 
    SplashWorker.DoWork += SplashWorker_DoWork; 
    SplashWorker.RunWorkerCompleted += SplashWorker_RunWorkerCompleted; 
    Result = null; 
    SplashWorker.RunWorkerAsync(); 
} 


private void Application_Startup(object sender, StartupEventArgs e) 
{ 
    this.ShutdownMode = ShutdownMode.OnExplicitShutdown; 

    SplashWindow sw = new SplashWindow(); 
    sw.Closed += (ss, ee) => 
    { 
     if (ServiceLocator.Current.GetInstance<SplashViewModel>().ClosedByUser) 
     { 
      this.Shutdown(); 
     } 
     ServiceLocator.Current.GetInstance<SplashViewModel>().Cleanup(); 
     sw = null; 
    }; 

    sw.Loaded += (ss, ee) => 
    { 
     ServiceLocator.Current.GetInstance<SplashViewModel>().RunWorker(); 
    }; 

    if ((bool)sw.ShowDialog()) 
    { 
     this.ShutdownMode = ShutdownMode.OnMainWindowClose; 
     MainWindow = new MainWindow(); 
     MainWindow.Show(); 
    } 
} 
+2

DataTemplateはバインディング中に動作しますが、これはInitializeComponentメソッドの後に発生します。ですから、あなたのSplashWorkerコードをアプリケーションの 'Startup'イベントに入れてください。 – AnjumSKhan

+1

私は形式的に適切なクレジットを持つ正式な回答を追加しました –

答えて

1

コメントで@AnjumSKhanで述べたように、InitializeComponentメソッドの後に起こるDataTemplateがバインド中に機能するため、コードをアプリケーションのStartupに移動してください。

関連する問題