我想将一些示例数据提供给ViewModel,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 article中的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>
中。
当我想测试它是否可以异步工作时,问题就开始了,为此我添加了这个“等待”行:
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]
任何人都可以解释这种行为吗?缺少什么?谢谢你的帮助。
答案 0 :(得分:0)
很难说,但对我来说,你试图在ViewModel
的构造函数中异步加载数据,问题是VM将在加载数据之前完成创建。如果您引用代码中预期要初始化的任何数据项,则可能会遇到System.NullReferenceException
我建议如果你想异步加载数据,不要在VM构造函数中加载。
您可以使用Behaviors SDK挂钩页面的Loaded事件,然后调用您的VM。