【问题标题】:Cannot create instance of type '%0' - error in Windows Phone 8.1无法创建类型“%0”的实例 - Windows Phone 8.1 中的错误
【发布时间】:2015-09-14 14:44:02
【问题描述】:

我想获取一些示例数据到 ViewModel,其中包含要在 XAML 中绑定的数据。代码如下:

    private NotifyTaskCompletion<ObservableCollection<Auction>> _recentAuctions;

    public NotifyTaskCompletion<ObservableCollection<Auction>> RecentAuctions
    {
        get
        {
            return _recentAuctions;
        }
        set
        {
            _recentAuctions = value;
            NotifyPropertyChanged("RecentAuctions");
        }
    }

    public MainMenuViewModel()
    {
        RecentAuctions = new NotifyTaskCompletion<ObservableCollection<Auction>>(dataService.GetRecentAuctions());
    }

(它使用来自MDSN articleNotifyTaskCompletion 模式)

GetRecentAuctions 方法:

    public async Task<ObservableCollection<Auction>> GetRecentAuctions()
    {
        return new ObservableCollection<Auction>
        {
            new Auction
            {
                Percentage = "69",
                Title = "Szybsza spłata",
                Date = "przed chwilą"
            },
            new Auction
            {
                Percentage = "33",
                Title = "Kolejna pożyczka, tym razem na remont.",
                Date = "1 minutę temu"
            }
        };
    }

到目前为止,它运行良好 - 项目显示在 &lt;ListView&gt; 中。 当我想测试它是否可以异步工作时,问题就开始了,为此我添加了这个“等待”行:

    public async Task<ObservableCollection<Auction>> GetRecentAuctions()
    {
        await Task.Delay(TimeSpan.FromSeconds(1));
        return new ObservableCollection<Auction>
        {
            ...

我收到以下错误:

在 XXX.exe 中发生了“System.NullReferenceException”类型的第一次机会异常 'XXX.exe' (CoreCLR: .): 加载'C:\windows\system32\System.Runtime.WindowsRuntime.UI.Xaml.NI.DLL'。无法找到或打开 PDB 文件。 XXX.exe 中发生了“Windows.UI.Xaml.Markup.XamlParseException”类型的第一次机会异常 WinRT 信息:无法创建类型“%0”的实例 [行:16 位置:10]

谁能解释这种行为?缺少什么?感谢您的帮助。

【问题讨论】:

    标签: .net xaml asynchronous windows-phone-8.1 async-await


    【解决方案1】:

    很难说,但在我看来,您正试图在 ViewModel 的构造函数中异步加载数据,问题是虚拟机将在加载数据之前完成创建。如果您在代码中引用任何预计将被初始化的数据项,您可能会遇到System.NullReferenceException

    如果你想异步加载数据,我建议不要在 VM 构造函数中进行。

    您可以使用 Behaviors SDK 挂钩页面的 Loaded 事件,然后调用您的 VM。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 2020-02-02
      相关资源
      最近更新 更多