Я пытаюсь динамически переключать 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>
Другой идентичен, за исключением того, что «Категории» заменены на «Записи» и «Имя категории» на «Имя записи».
Заранее спасибо за помощь.