2016-04-05 13 views
1

Ich mache einen Startbildschirm in App.cs. Wenn ich SplashWorker.RunWorkerAsync(); DataTemplate nicht verwendet.
, aber bei der Annotation dieses Codes wurde DataTemplate angezeigt ....DataTemplate nicht in Application_Startup

Es ist ordnungsgemäß ViewModel und ResourceDictionary registriert.

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 würde während der Bindung funktionieren, was nach der InitializeComponent-Methode geschieht. Stellen Sie Ihren SplashWorker-Code in das Startup-Ereignis der Anwendung. – AnjumSKhan

+1

Ich fügte eine formelle Antwort mit richtigem Kredit für Formalität hinzu –

Antwort

1

Wie von @AnjumSKhan in den Kommentaren erwähnt, verschieben Sie Ihre SplashWorker Code in Startup Ereignis der Anwendung, da DataTemplate würde während der Bindung funktionieren, was nach InitializeComponent Methode geschieht.