我有这样的XAML代码:
<toolkit:ListPicker x:Name="lstStatus" SelectionMode="Single" ItemTemplate="{StaticResource ListPickerItemTemplate}" FullModeItemTemplate="{StaticResource ListPickerFullModeItemTemplate}" FullModeHeader="Items" CacheMode="BitmapCache"/>
<phone:PhoneApplicationPage.Resources>
<DataTemplate x:Name="ListPickerItemTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" Margin="10 0 0 0"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Name="ListPickerFullModeItemTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" Margin="10 0 0 0"/>
</StackPanel>
</DataTemplate>
</phone:PhoneApplicationPage.Resources>
我使用以下方法填充项目来源:
public List<Items> PopulatelstStatus()
{
List<Items> source = new List<Items>();
source.Add(new Items() { Name = "Booked" });
source.Add(new Items() { Name = "Confirmed" });
source.Add(new Items() { Name = "Completed" });
source.Add(new Items() { Name = "Cancelled" });
return source;
}
lstStatus.ItemsSource = PopulatelstStatus();
问题是,当我想设置此ListPicker的SelectedItem属性时,它会引发InvalidOperationException。我尝试了以下内容。
var item = PopulatelstStatus().SingleOrDefault(n => n.Name == equipBooking.Status.Description);
lstStatus.SelectedItem = item;
和
var item = PopulatelstStatus().SingleOrDefault(n => n.Name == equipBooking.Status.Description);
lstStatus.SelectedIndex = PopulatelstStatus().IndexOf(item);
答案 0 :(得分:1)
设置SelectedItem时,需要使用ItemsSource包含的项目进行设置。每次调用PopulatelstStatus
方法时,它都会生成一个新的项集合。这个新的项目集合与您设置为ListPicker的ItemsSource的集合不同。
看起来你喜欢的是静态的。您应该缓存列表并使用它。
private List<Items> _source;
public List<Items> PopulatelstStatus()
{
if(_source == null)
{
_source = new List<Items>();
_source.Add(new Items() { Name = "Booked" });
_source.Add(new Items() { Name = "Confirmed" });
_source.Add(new Items() { Name = "Completed" });
_source.Add(new Items() { Name = "Cancelled" });
}
return _source;
}
现在,当您致电PopulatelstStatus
时,它将始终是同一个集合,当您从中获取项目时,它将与ListPicker中包含的项目相同。