【发布时间】:2013-02-24 15:47:52
【问题描述】:
我使用已定义视图模型的默认模板启动了一个电话应用程序。我修改了 MainViewModel 的 LoadData() 方法以异步调用 odata 服务。但它不适用于数据绑定。我已经验证调用成功返回但没有显示结果。
LongListSelector 的项目源绑定到视图模型中的 Items 属性。
<phone:LongListSelector ItemsSource="{Binding Items}" x:Name="MainLongListSelector" Margin="0,0,-12,0" SelectionChanged="MainLongListSelector_SelectionChanged">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17">
<TextBlock Text="{Binding UnReadCount}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock Text="{Binding description}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
</StackPanel>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
这是我对视图模型的修改(注意 async 和 await 的用法):
public void LoadData()
{
FetchTileViewItems();
}
private async void FetchTileViewItems()
{
var ret = await I2ADataServiceHelper.GetTileViewItemsAsync();
this.Items = new ObservableCollection<TileViewItem>(ret);
this.IsDataLoaded = true;
}
我在页面上的 NavigatedTo 事件中调用 LoadData() 方法,就像以前一样:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (!App.ViewModel.IsDataLoaded)
{
App.ViewModel.LoadData();
pr1.IsVisible = false;
}
}
点击运行,没有任何显示...我错过了什么吗?任何指针都非常感谢。
【问题讨论】:
-
pr1是什么?不应该是pr1.IsVisible = true;吗?
标签: c# data-binding mvvm windows-phone-8 async-await