尝试将我创建的对象绑定到listpicker时遇到问题。我使用带有字符串和整数的listpicker取得了成功,但在尝试使用自己的类/对象时遇到了问题。
这是XML(我有两个listpickers,一个有效,一个没有)
<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);
第二个listpicker很好,我认为这是因为它包含字符串。
我的破坏的listpicker显示所有正确的数据但是当我选择listpickeritem时,它不会选择它。该应用程序加载完整的listpicker并单击其中一个项目,当我返回主视图时,所选项目不会反映在listpicker中。
有人有什么想法吗?需要我解释一下吗?
答案 0 :(得分:2)
我自己想出了这个。我有一个Loaded函数,其中listpicker正在初始化。当listpicker从全屏视图返回时,看起来Loaded会被“加载”,而全屏视图又会重置selectedIndex。修复很简单,只需移动列表的创建,并将itemSource从Loaded函数设置为构造函数。