Привязка панорамы в WP7, коллекция Items должна быть пустой перед использованием ItemsSource - PullRequest
1 голос
/ 25 июля 2011

Я получаю эту ошибку: коллекция элементов должна быть пустой перед использованием ItemsSource, когда я пытаюсь привязать данные к элементу управления Panorama. ниже мой фрагмент 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 Ответ

2 голосов
/ 25 июля 2011

Ваша проблема в том, что вы строите Panorama в XAML, как если бы он был статичным, а не подготавливал его к привязке к данным.

Взгляните на этот краткий учебник по управлению панорамой привязки данных:

Панорамное управление привязкой данных WP7 MVVM

Обратите внимание на разницу в том, как создается ваш XAML для элемента управления.Вместо настройки коллекции Items в элементе управления Panorama необходимо установить HeaderTemplate и ItemTemplate, чтобы элемент управления знал, как отображать объекты, когда к ним привязаны данные.

...