WP7上的Panorama绑定,在使用ItemsSource之前,Items集合必须为空

时间:2011-07-25 13:40:24

标签: data-binding windows-phone-7 panorama-control

我不断收到此错误:当我尝试将数据绑定到Panorama控件时,在使用ItemsSource之前,项目集合必须为空。下面是我的xaml片段。

<controls:Panorama x:Name="panorama">
 <controls:PanoramaItem >
  <StackPanel>
   <TextBlock Text="{Binding Text}"/>
  </StackPanel>
 </controls:PanoramaItem>
</controls:Panorama>

在我的代码(xaml.cs)中,我做了类似的事情:

protected override void OnNavigatedTo(NavigationEventArgs e) {
 string id = NavigationContext.QueryString["id"];
 ObservableCollection<MyObject> list = DataAccessService.get(id);
 panorama.ItemsSource = list;
 base.OnNavigatedTo(e);
}

请注意,MyObject具有Text属性。任何帮助表示赞赏。

按照下面的链接修改后,仍会抛出相同的异常。

<controls:Panorama x:Name="panorama">
 <controls:Panorama.HeaderTemplate>
  <DataTemplate>
   <TextBlock Text="{Binding Header}"/>
  </DataTemplate>
 </controls:Panorama.HeaderTemplate>
 <controls:PanoramaItem >
  <DataTemplate>
   <StackPanel>
    <TextBlock Text="{Binding Text}"/>
   </StackPanel>
  </DataTemplate>
 </controls:PanoramaItem>
</controls:Panorama>

最后,在继续向用户提供帮助之后,这是摆脱异常的解决方案。

<controls:Panorama x:Name="panorama">
 <controls:Panorama.HeaderTemplate>
  <DataTemplate>
   <TextBlock Text="{Binding Header}"/>
  </DataTemplate>
 </controls:Panorama.HeaderTemplate>
 <controls:Panorama.ItemTemplate>
  <DataTemplate>
   <StackPanel>
    <TextBlock Text="{Binding Text}"/>
   </StackPanel>
  </DataTemplate>
 </controls:Panorama.ItemTemplate>
</controls:Panorama>

1 个答案:

答案 0 :(得分:2)

你的问题是你在XAML中构建Panorama就好像它是静态的而不是准备它是数据绑定的。

查看数据绑定全景控件的快速教程:

Data Binding Panorama Control WP7 MVVM

注意为控件构建XAML的方式不同。您不需要在Panorama控件上设置Items集合,而是需要设置HeaderTemplate和ItemTemplate,以便控件知道在绑定数据后如何呈现内容。