我想获得一些示例数据到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文章的NotifyTaskCompletion
模式)
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"
}
};
}
到目前为止,它运行良好-项目显示在<ListView>
中。当我想测试它是否可以异步工作时,问题开始了,我添加了这个"await"行:
public async Task<ObservableCollection<Auction>> GetRecentAuctions()
{
await Task.Delay(TimeSpan.FromSeconds(1));
return new ObservableCollection<Auction>
{
...
,得到以下错误:
类型为'System '的第一次异常。在XXX.exe中发生NullReferenceException" XXX.exe " (CoreCLR: .): Loaded " C:windowssystem32 system . runtime . windowsrtime . ui . xaml . ni . dll "。无法找到或打开PDB文件。类型为"windows . ui . xml . markup"的第一次机会异常。XXX.exe中发生XamlParseExceptionWinRT information: Cannot create type '%0' instance [Line: 16 Position: 10]
有人能解释这种行为吗?缺少什么?谢谢你的帮助。
很难说,但对我来说,它看起来像是你试图在ViewModel
的构造函数中异步加载数据,问题是虚拟机将在加载数据之前完成创建。如果您正在引用代码中预期初始化的任何数据项,则可能会遇到System.NullReferenceException
如果你想异步加载数据,我建议不要在VM构造函数中这样做。
你可以使用behavior SDK来钩入页面的Loaded事件,然后调用到你的VM。