MVVM 轻型"Type Not Found in cache"



我正试图将我的Windows Phone 8 Silverlight应用程序转换为8.1 Phone应用程序,作为通用应用程序的一部分。我不知道这是否相关,因为这是我第一次尝试正确实现视图模型。我希望在Windows和Windows Phone的视图之间共享数据。总之,这是我得到的错误。

Error   3   Type not found in cache: ScoreAlerts.ViewModel.FixturesViewModel.   C:UsersDaveDocumentsVisual Studio 2012ProjectsScore AlertsScoreAlertsScoreAlerts.WindowsPhonePagesFixtures.xaml   9   5   ScoreAlerts.WindowsPhone
Error   4   Type not found in cache: ScoreAlerts.ViewModel.HomePageViewModel.   C:UsersDaveDocumentsVisual Studio 2012ProjectsScore AlertsScoreAlertsScoreAlerts.SharedPagesHomePage.xaml 34  9   ScoreAlerts.WindowsPhone

这是我的视图模型定位器的样子

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
    }
}

我的视图XAML有这个

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

我的app有这个

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

你知道我做错了什么吗?

答案是一个相当简单的错误。在设计模式下未执行此位

SimpleIoc.Default.Register<HomePageViewModel>();

我的代码simpleoc . default . register ();在从未在设计模式下执行的if语句中。

在我的例子中,目标类没有实现无参数构造函数。该类包含的唯一构造函数接受字节类型参数,因此我得到:

在缓存中找不到类型:System。字节

我的注册线是这样的:

SimpleIoc.Default.Register<IMyInterface, MyConcreteClass>();

我给MyConcreteClass添加了一个无参数的构造函数,然后给它应用了[PreferredConstructor]属性(这个属性在GalaSoft.MvvmLight.Ioc命名空间中可用),解决了这个问题。

相关内容

  • 没有找到相关文章