Проблема привязки Listpicker WP7

У меня возникла проблема при попытке привязать объект, который я создал, к средству выбора списка. Я успешно использовал средство выбора списка со строками и целыми числами, но у меня возникают проблемы при попытке использовать свой собственный класс/объект.

Вот XML (у меня есть два списка, один работает, а другой нет)

                            <toolkit:ListPicker 
                            x:Name="CountryListPicker" 
                            Margin="0,2,0,10" Width="458" 
                            BorderThickness="3" FullModeHeader="Country"
                            CacheMode="BitmapCache">
                            <toolkit:ListPicker.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal">
                                        <Border Background="LightBlue" Width="34" Height="34">
                                            <TextBlock Text="{Binding _code}" FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                        </Border>
                                        <TextBlock Text="{Binding _name}" Margin="12 0 0 0"/>
                                    </StackPanel>
                                </DataTemplate>
                            </toolkit:ListPicker.ItemTemplate>
                            <toolkit:ListPicker.FullModeItemTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal" Margin="0 21 0 20">
                                        <TextBlock Text="{Binding _name}" Margin="16 0 0 0" FontSize="43" FontFamily="{StaticResource PhoneFontFamilyLight}"/>
                                    </StackPanel>
                                </DataTemplate>
                            </toolkit:ListPicker.FullModeItemTemplate>
                        </toolkit:ListPicker>

                        <toolkit:ListPicker
                            x:Name="testPicker"
                            Header="Accent color" 
                            FullModeHeader="ACCENTS" 
                            CacheMode="BitmapCache">
                            <toolkit:ListPicker.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal">
                                        <TextBlock Text="{Binding}" Margin="12 0 0 0"/>
                                    </StackPanel>
                                </DataTemplate>
                            </toolkit:ListPicker.ItemTemplate>
                            <toolkit:ListPicker.FullModeItemTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal" Margin="0 21 0 20">
                                        <TextBlock Text="{Binding}"
                                   Margin="16 0 0 0"
                                   FontSize="43"
                                   FontFamily="{StaticResource PhoneFontFamilyLight}"/>
                                    </StackPanel>
                                </DataTemplate>
                            </toolkit:ListPicker.FullModeItemTemplate>
                        </toolkit:ListPicker>`

Первое средство выбора списка — это мой новый объект, привязывающий одно, а второе — привязку строки.

Вот код позади:

        ObservableCollection<Country> countries = new ObservableCollection<Country>();
        countries.Add(new Country { _code = "US", _name = "United States1"});
        countries.Add(new Country { _code = "US", _name = "United States2" });
        countries.Add(new Country { _code = "US", _name = "United States3" });
        countries.Add(new Country { _code = "US", _name = "United States4" });
        countries.Add(new Country { _code = "US", _name = "United States5" });
        countries.Add(new Country { _code = "US", _name = "United States6" });
        this.CountryListPicker.ItemsSource = new ReadOnlyCollection<Country>(countries);

        ObservableCollection<string> _accentColors = new ObservableCollection<string>();
        _accentColors.Add("Blue");
        _accentColors.Add("Blue2");
        _accentColors.Add("Blue3");
        _accentColors.Add("Blue4");
        _accentColors.Add("Blue5");
        _accentColors.Add("Blue6");
        _accentColors.Add("Blue7");
        this.testPicker.ItemsSource = new ReadOnlyCollection<string>(_accentColors);

Второй список в порядке, и я думаю, это потому, что он содержит строки.

Мой сломанный список отображает все правильные данные, но когда я выбираю элемент списка, он не выбирает его. Приложение загружает полный список, и я щелкаю один из элементов, и когда я возвращаюсь к основному представлению, выбранный элемент не отображается в списке.

У кого-нибудь есть идеи? Мне нужно больше объяснять?


person garry    schedule 17.11.2011    source источник
comment
Привет, есть новая версия инструментария wp7, и в ней исправлено МНОГО ошибок в ее ListPicker, вы можете проверить ее. :) silverlight.codeplex.com/releases/view/75888   -  person Justin XL    schedule 17.11.2011
comment
Спасибо, но я использую последнюю версию. Я думал, что обновление исправит это, но оно устраняет только проблемы с прокруткой. Должен ли мой объект реализовывать какой-то интерфейс, чтобы информировать пользовательский интерфейс о том, что выбор произошел?   -  person garry    schedule 17.11.2011
comment
Я также разместил эту проблему на CodePlex для тех из вас, кто хочет следовать этому. Я буду публиковать любые ответы здесь, если они работают для меня. silverlight.codeplex.com/workitem/9839   -  person garry    schedule 17.11.2011
comment
Извините, только что увидел ваши комментарии, хорошо, что вы это поняли. Я думаю, это имеет смысл. Когда вы возвращаетесь на главную страницу, ListPicker снова загружается и сбрасывает свой ItemsSource, поэтому он теряет свой SelectedIndex.   -  person Justin XL    schedule 18.11.2011


Ответы (1)


Я разобрался с этим самостоятельно. У меня была функция Loaded, в которой инициализировался список. Похоже, что Loaded «загружается», когда средство выбора списка возвращается из полноэкранного режима, что, в свою очередь, сбрасывает selectedIndex. Исправить было легко, просто переместите создание списков, а также установку itemSource из функции Loaded в конструктор.

person garry    schedule 17.11.2011