我有一个项目,需要将一个字符串列表绑定到一个listpicker控件。绑定完成后(在Loaded或OnNavigatedTo事件中),listpicker会打开以显示绑定项目,但某些项目会随机丢失(全屏模式)。当列表选择器开始关闭时,似乎会出现缺失的项目。不知道为什么会发生这种情况 - 它是一个列表选择器错误还是我不正确地绑定?我正在使用2011年11月发布的silverlight工具包。WP7 Listpicker不显示所有项目
PS:这个问题似乎不使用少量物品时发生(说最多10个)
请使用下面的代码来重现问题
首页XAML 背后
<TextBlock Text="Time of Day" Grid.Row="0" Margin="12,0,0,0" Style="{StaticResource PhoneTextNormalStyle}" />
<toolkit:ListPicker x:Name="TimesOfDayList" Grid.Row="1" SelectionMode="Multiple" FullModeHeader="Time of Day"
ExpansionMode="FullScreenOnly" ItemsSource="{Binding TimesOfDay}"
Margin="12,0,12,12">
<toolkit:ListPicker.FullModeItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Margin="24,0,0,0" Style="{StaticResource PhoneTextLargeStyle}" />
</DataTemplate>
</toolkit:ListPicker.FullModeItemTemplate>
</toolkit:ListPicker>
</Grid>
主页代码
private MainPageViewModel _viewModel;
public MainPage()
{
InitializeComponent();
Loaded += MainPage_Loaded;
TimesOfDayList.SummaryForSelectedItemsDelegate = TimesOfDaySummary;
}
void MainPage_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
_viewModel = new MainPageViewModel();
DataContext = _viewModel;
}
private string TimesOfDaySummary(IList items)
{
string itemNames = string.Empty;
if (items != null && items.Count > 0)
{
var itemsList = items.Cast<string>().AsQueryable();
foreach (var item in itemsList)
{
if (item != itemsList.Last())
itemNames += item + ", ";
else
itemNames += item;
}
}
return itemNames;
}
ViewModel类
public class MainPageViewModel : INotifyPropertyChanged
{
public MainPageViewModel()
{
TimesOfDay = new List<string>
{
"12:00 AM",
"12:30 AM",
"01:00 AM",
"01:30 AM",
"02:00 AM",
"02:30 AM",
"03:00 AM",
"03:30 AM",
"04:00 AM",
"04:30 AM",
"05:00 AM",
"05:30 AM",
"06:00 AM",
"06:30 AM",
"07:00 AM",
"07:30 AM",
"08:00 AM",
"08:30 AM",
"09:00 AM",
"09:30 AM",
"10:00 AM",
"10:30 AM",
"11:00 AM",
"11:30 AM",
"12:00 PM",
"12:30 PM",
"01:00 PM",
"01:30 PM",
"02:00 PM",
"02:30 PM",
"03:00 PM",
"03:30 PM",
"04:00 PM",
"04:30 PM",
"05:00 PM",
"05:30 PM",
"06:00 PM",
"06:30 PM",
"07:00 PM",
"07:30 PM",
"08:00 PM",
"08:30 PM",
"09:00 PM",
"09:30 PM",
"10:00 PM",
"10:30 PM",
"11:00 PM",
"11:30 PM"
};
}
private List<string> _timesOfDay;
public List<string> TimesOfDay
{
get { return _timesOfDay; }
set
{
if(_timesOfDay != value)
{
_timesOfDay = value;
OnPropertyChanged("TimesOfDay");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}
删除样式并没有解决我的问题。你能重新检查它对你有用吗? – Girish 2012-04-17 11:06:20
哎呀..突然它不起作用。让我看看这里发生了什么... – 2012-04-17 11:32:33
嗨,再次。我花了一些时间试图弄清楚这里发生了什么,我真的很惊讶。没有办法解决它。我想这应该是一个错误,但不能相信目前没有人遇到这个问题。 – 2012-04-17 11:50:35