LongListSelector - значение не попадает в ожидаемый диапазон

Я обновил приложение с wp7 до 8 и теперь получаю исключение System.ArgumentException "Значение не попадает в ожидаемый диапазон". Приложение выдает исключение после выхода из метода, в котором я установил ItemsSource для элемента управления LongListSelector. StackTrace недоступен в ExceptionObject, и это работает без проблем в wp7.

В качестве теста я сделал следующее в событии Loaded для приложения:

 private void PhoneApplicationPage_Loaded_1(object sender, RoutedEventArgs e)
        {
            List<string> test = new List<string>();
            test.Add("hi");
            BrowseListBox.ItemsSource = test;
        }

После завершения метода генерируется исключение.

Вот мой XAML для LongListSelector. Текстовые свойства TextBlock ранее были привязаны, но были заменены статическими значениями, пока я не получу эту работу.

<phone:LongListSelector Name="BrowseListBox" IsGroupingEnabled="True" LayoutMode="Grid">
                    <phone:LongListSelector.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Margin="0,0,0,17">
                                <TextBlock Text="test" TextWrapping="Wrap" FontSize="29" Tap="TextBlock_Tap_1" />
                            </StackPanel>
                        </DataTemplate>
                    </phone:LongListSelector.ItemTemplate>
                    <phone:LongListSelector.GroupHeaderTemplate>
                        <DataTemplate>
                            <Border>
                                <TextBlock Text="test" FontSize="32" Foreground="White"  />
                            </Border>
                        </DataTemplate>
                    </phone:LongListSelector.GroupHeaderTemplate>
                    <phone:LongListSelector.JumpListStyle>
                        <Style TargetType="phone:LongListSelector">
                            <Setter Property="ItemTemplate">
                                <Setter.Value>
                                    <DataTemplate>
                                        <Border Name="JumpListBorder" BorderThickness="0,0,0,1">
                                            <TextBlock Text="test" FontSize="50" Foreground="White"  />
                                        </Border>
                                    </DataTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </phone:LongListSelector.JumpListStyle>
                </phone:LongListSelector>

Кто-нибудь видел это раньше?

3 ответа

Решение

Это потому, что вы используете LayoutMode Grid

Вы можете либо не использовать сетку, либо указать свойство GridCellSize, и тогда оно будет работать:

<phone:LongListSelector Name="BrowseListBox" IsGroupingEnabled="True" LayoutMode="Grid" GridCellSize="50,50">

Для меня у меня была такая же проблема, вокруг не было найдено никакого решения. Я перезапустил свою визуальную студию, и она ушла.

Я получил эти проблемы при попытке уведомить об изменении свойства из потока (асинхронная задача), однако приложение не выдало мне ошибку, но при возврате к представлению я получил ошибку, о которой вы упоминали выше. Использование диспетчера решило мою проблему.

Deployment.Current.Dispatcher.BeginInvoke(delegate
            {
               // Do work
            });
Другие вопросы по тегам