Управление DataBound Pivot не создает первый PivotItem
На странице Windows Phone 7 у меня есть следующее управление:
<controls:Pivot x:Name="Pivoter" Title="{Binding Name}"
TitleTemplate="{StaticResource PivotTitleTemplate}"
HeaderTemplate="{StaticResource PivotHeaderTemplate}"
ItemsSource="{Binding Items}"
ItemTemplate="{StaticResource DisplayItemDataTemplate}">
</controls:Pivot >
с этим DataTemplate:
<DataTemplate x:Key="DisplayItemDataTemplate">
<Image Grid.Column="0" Stretch="Uniform"
Source="{Binding LargeImage, Converter={StaticResource UriBitmapConverter}}"/>
<StackPanel Grid.Column="1" Orientation="Vertical">
<HyperlinkButton NavigateUri="{Binding Uri}" Content="{Binding Uri}"/>
</StackPanel>
</DataTemplate>
ItemsSource
- это ObservableCollection
. Когда страница отображается, она создает все PivotItems
, но первый элемент не создается, если я не прокручиваю вперед и назад. Он имеет запись в списке прокрутки, но не PivotItem
.
Если я поставил точку останова в событии Pivot Control LoadingPivotItem
, он не вызывается, когда сначала отображается опорная точка, а снова попадает только при прокрутке и возврате к первому элементу.
Кто-нибудь видел подобное поведение для элемента управления Pivot
и работает? Или я делаю что-то неправильно?
Ответы
Ответ 1
Я столкнулся с этой проблемой.
Это появляется DataContext для поворота должно быть установлено в конструкторе. Я устанавливал свой DataContext в событие Page_Loaded, и первый опорный элемент не запускал событие "Загрузка", как описано. Просто связав мой DataContext раньше, событие начало стрелять.
Я считаю, что это ошибка в рамках, но я не сделал достаточно, чтобы подтвердить это.
Ответ 2
Я столкнулся с этим, и я не смог решить это, установив контекст данных в конструкторе, поскольку данные, которые собирались отображаться, зависели от информации из NavigationService, поэтому мне пришлось загрузить данные в обработчик page_loaded-event.
Но, установив pivot-controls SelectedIndex на 1 в загруженном страницы, он волшебным образом начал работать. Это не идеальное решение, но в этом случае это был блокиратор, который мне просто нужно было исправить.
Пример кода:
void ChannelOverview_Loaded(object sender, RoutedEventArgs e)
{
string channelSystemName;
if(this.NavigationContext.QueryString.TryGetValue("channelSystemName", out channelSystemName))
{
this.viewModel.LoadData(this.Dispatcher, channelSystemName);
//Set the SelectedIndex to one,
//otherwise the pivot-view won't render the first item.
this.overviewPivot.SelectedIndex = 1;
}
else
{
MessageBox.Show("Kanalen hade ett felaktigt Id ");
}
}
Ответ 3
Может быть, немного поздно, но может кому-то помочь. Как отмечено в документе, SelectedIndex точки поворота, если 0 и изменение контекста данных, приводящее к тому, что SelectedIndex равно 0, не обновляет первый элемент поворота и не вызывает события загрузки элемента поворота. Однако, следуя также работал, когда у меня был связанный с данными поворотный контроль. Обратите внимание, что pivotTypes.Items [0] возвращает объект, привязанный к данным, а не элемент поворота.
pivotTypes.SelectedItem = pivotTypes.Items[ 0 ];
Ответ 4
Этот blogpost решил мою проблему.
Моя проблема с другими предлагаемыми решениями заключалась в том, что я не смог использовать конструктор для установки DataContext, и что время от времени был только один PivotItem, поэтому я мог переключаться назад и вперед, чтобы загрузить контент.
Решение чрезвычайно просто: перед обновлением коллекции, которую Pivot должен установить для своего DataContext равным null. Затем обновите коллекцию и после этого установите DataContext в коллекцию.