Ошибка при обновлении DataContext для Windows Phone 7 Pivot - PullRequest
0 голосов
/ 15 декабря 2010

Я пытаюсь динамически переключать DataContext для моего приложения, когда меняется выбор элемента Pivot. Все работает так, как я хочу, однако я все время получаю ошибки в окне вывода отладчика о том, что источники данных не найдены в ListBoxes, присутствующих внутри PivotItems, которые в настоящий момент не выбраны PivotItem.

Например, допустим, у меня есть 2 PivotItems - PivotItem1 и PivotItem2 - каждый из которых отображает по одному ListBox - ListBox1 и ListBox2. Теперь, когда PivotItem1 активен и отображает ListBox1, ListBox2 жалуется на то, что его источник данных не найден, что правильно, поскольку текущий DataContext не содержит коллекцию, с которой он связан. Это ошибка (я добавил дополнительные разрывы строк):

System.Windows.Data Error: BindingExpression path error: 
'Entries' property not found on 'MyApp.ViewModels.CategoriesView' 
'MyApp.ViewModels.CategoriesView' (HashCode=79283607). 
BindingExpression: Path='Entries' 
DataItem='MyApp.ViewModels.CategoriesView' 
(HashCode=79283607); target element is 
'System.Windows.Controls.ListBox' (Name='ListBox2'); 
target property is 'ItemsSource' (type 'System.Collections.IEnumerable')..

Аналогично, когда активен PivotItem2, ListBox1 выдает ошибку. Я обновляю DataContext в событии LoadingPivotItem Pivot, я также пытался сделать это в событии LoadedPivotItem, но получаю ту же ошибку.

Обе коллекции реализуют INotifyPropertyChanged, и, как я уже упоминал в начале, все работает, несмотря на ошибку. Я хотел бы как-то подавить ошибку.

Вот XAML для одного из списков:

<ListBox x:Name="ListBox1"
         Margin="0,0,-12,0"
         ItemsSource="{Binding Categories}">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <StackPanel Margin="0,0,0,17"
                  Width="432">
        <TextBlock Text="{Binding CategoryName}"
                   TextWrapping="Wrap"
                   Margin="12,0,0,0"
                   Style="{StaticResource PhoneTextExtraLargeStyle}" />
      </StackPanel>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

Другой идентичен, за исключением того, что «Категории» заменены на «Записи» и «Имя категории» на «Имя записи».

Заранее спасибо за помощь.

1 Ответ

1 голос
/ 15 декабря 2010

Хотя выполняемое вами действие не вызывает никаких ошибок в вашем приложении, оно будет влиять на устройство в целом, пока платформа Silverlight обрабатывает ошибки привязки.

Вместо двух разныхмодели данных и их изменение, почему бы не иметь единственную модель, которая содержит модели «Категории» и «Записи», а просто установить ту, которую вы не отображаете, как пустую коллекцию (или любую другую, в зависимости от ситуации).Это позволило бы привязкам все еще работать, но предотвратило бы заполнение списков, которые вы не отображаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...