2014-05-11 18 views
7

Sto provando a convertire l'applicazione Silverlight di Windows Phone 8 in un'app 8.1 Phone come parte di un'app universale. Non so se questo è rilevante perché questa è la prima volta che ho provato ad implementare correttamente i modelli di visualizzazione. Mi piacerebbe condividere i dati tra le visualizzazioni in Windows e Windows Phone. Ad ogni modo, questo è l'errore che sto ottenendo.MVVM Light "Tipo non trovato nella cache"

Error 3 Type not found in cache: ScoreAlerts.ViewModel.FixturesViewModel. C:\Users\Dave\Documents\Visual Studio 2012\Projects\Score Alerts\ScoreAlerts\ScoreAlerts.WindowsPhone\Pages\Fixtures.xaml 9 5 ScoreAlerts.WindowsPhone 
Error 4 Type not found in cache: ScoreAlerts.ViewModel.HomePageViewModel. C:\Users\Dave\Documents\Visual Studio 2012\Projects\Score Alerts\ScoreAlerts\ScoreAlerts.Shared\Pages\HomePage.xaml 34 9 ScoreAlerts.WindowsPhone 

Questo è come la mia vista del modello localizzatore sembra

public class ViewModelLocator 
{ 
    /// <summary> 
    /// Initializes a new instance of the ViewModelLocator class. 
    /// </summary> 
    public ViewModelLocator() 
    { 
     if (!ViewModelBase.IsInDesignModeStatic) 
     { 
      ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); 

      if (ViewModelBase.IsInDesignModeStatic) 
      { 
       // Create design time view services and models 
       //SimpleIoc.Default.Register<IDataService, DesignDataService>(); 
      } 
      else 
      { 
       // Create run time view services and models 
       //SimpleIoc.Default.Register<IDataService, DataService>(); 
      } 

      SimpleIoc.Default.Register<HomePageViewModel>(); 
      SimpleIoc.Default.Register<FixturesViewModel>(); 
     } 
    } 

    [SuppressMessage("Microsoft.Performance", 
     "CA1822:MarkMembersAsStatic", 
     Justification = "This non-static member is needed for data binding purposes.")] 
    public HomePageViewModel Main 
    { 
     get 
     { 
      //return ServiceLocator.Current.GetInstance<HomePageViewModel>(); 
      return SimpleIoc.Default.GetInstance<HomePageViewModel>("default"); 
     } 
    } 

    [SuppressMessage("Microsoft.Performance", 
     "CA1822:MarkMembersAsStatic", 
     Justification = "This non-static member is needed for data binding purposes.")] 
    public FixturesViewModel Fixtures 
    { 
     get 
     { 
      //return ServiceLocator.Current.GetInstance<FixturesViewModel>(); 
      return SimpleIoc.Default.GetInstance<FixturesViewModel>("default"); 
     } 
    } 

    public static void Cleanup() 
    { 
     // TODO Clear the ViewModels 
    } 
} 

mio punto di vista XAML ha questo

DataContext="{Binding Fixtures, Source={StaticResource Locator}}" 

e la mia app ha questo

<viewModel:ViewModelLocator x:Key="Locator" 
         d:IsDataSource="True"/> 

Tutte le idee che ho sto sbagliando?

risposta

12

La risposta è stata un errore abbastanza semplice. Questo bit non è in esecuzione in modalità di progettazione

SimpleIoc.Default.Register<HomePageViewModel>(); 

Il mio codice per SimpleIoc.Default.Register(); era all'interno di un'istruzione if che non è mai stata eseguita in modalità progettazione.

+0

Anche dopo la registrazione, l'errore persiste. –

+0

Anche qui ho altre dozzine di altri ViewModel registrati allo stesso modo. Non capisco perché questo sta lanciando questo errore. La cosa strana è che è vuota e eredita dalla stessa classe astratta degli altri. Confuso. Qualche altro suggerimento? – Thierry

+0

Quando dici che un po 'di codice non è stato eseguito in modalità progettazione, non stai dicendo come lo hai risolto? Puoi spiegare? – Thierry

Problemi correlati