Я пытаюсь динамически переключать DataContext
для моего приложения при изменении элемента Pivot
. Все работает так, как я этого хочу, однако я продолжаю получать ошибки в окне вывода отладчика о том, что источники данных не найдены из списка ListBox, присутствующих внутри PivotItems, которые не выбраны в настоящее время PivotItem
.Ошибка при обновлении DataContext для Windows Phone 7 Pivot
Например, скажем, у меня есть 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 для одного в ListBoxes:
<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>
Другой идентичны, за исключением «Категории» заменяется на «Записи» и «CategoryName» по «EntryName».
Заранее за вашу помощь.
Это отличная идея. Мне любопытно, известно ли это об известном поведении, что делается попытка загрузить привязки неактивных элементов пользовательского интерфейса в настоящее время? – Praetorian
@Praetorian Я ожидал, что все привязки будут оцениваться одновременно с целью поиска проблем (повышение ошибок привязки) как можно скорее. Небезопасно предположить, что привязки будут обновляться при изменении пользовательского интерфейса. Очень много общего (ожидается?) Для того, чтобы набор данных был установлен один раз, а затем изменения обрабатывались в viewmodel. –