2

作成したオブジェクトをリストピッカーにバインドしようとすると問題が発生します。文字列とintでリストピッカーを使用することに成功しましたが、自分のクラス/オブジェクトを使用しようとすると問題が発生します。

これがXMLです(私は2つのリストピッカーを持っています。1つは機能し、もう1つは機能しません)

                            <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>`

最初のリストピッカーは、1つをバインドする新しいオブジェクトであり、2番目は文字列をバインドするオブジェクトです。

背後にあるコードは次のとおりです。

        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);

2番目のリストピッカーは問題ありません。これは文字列が含まれているためだと思います。

壊れたリストピッカーには正しいデータがすべて表示されますが、リストピッカーアイテムを選択しても選択されません。アプリが完全なリストピッカーをロードし、アイテムの1つをクリックすると、メインビューに戻ったときに、選択したアイテムがリストピッカーに反映されません。

誰かアイデアはありますか?もう説明する必要がありますか?

4

1 に答える 1

2

私はこれを自分で考え出しました。リストピッカーが初期化されている Loaded 関数がありました。リストピッカーがフルスクリーンビューから戻ったときに Loaded が「ロード」され、selectedIndex がリセットされるように見えます。修正は簡単で、リストの作成を移動し、ItemSource を Loaded 関数からコンストラクターに設定するだけです。

于 2011-11-17T19:45:45.747 に答える