我的wp7应用程序中有listpicker控件。我想根据我的需要设置选定的索引。让我假设我的listpicker中有100个项目如果我将所选索引设置为低于40,那就顺利了。但是当我将Selected index设置为50以上时,它会变为空白,UI不会刷新,但在后端显示正确的项目。
示例项目:http://yaariyan.net/Test_Project.rar
在这个项目中你可以得到
所有来源
要测试的XAP文件
重现步骤
错误快照
只需使用我的最后两个按钮,您就可以轻松重现问题。
我正在使用Windows Phone 7.1.1 SDK和Silverlight Took Kit 2011年11月版。
DLL也在我的文件夹中,我在我的项目中引用
答案 0 :(得分:0)
我遇到过同样的问题。我担心我还不能提出解决方案,但我已经把问题缩小了一点。我可以验证问题似乎发生在SelectedIndex
40到50之间(在我的情况下为48)。
我做的缩小范围是简单地创建一个新的WP解决方案,在ListPicker
视图中添加两个MainPage.xaml
控件以及一个按钮。我通过代码在两个列表中添加了50个字符串,并在第一个列表中将SelectedIndex
设置为0,在第二个列表上设置为50。
按钮执行SelectedIndex属性的简单切换,如下所示:
private void button1_Click(object sender, RoutedEventArgs e)
{
int tempindex = listPicker1.SelectedIndex;
listPicker1.SelectedIndex = listPicker2.SelectedIndex;
listPicker2.SelectedIndex = tempindex;
}
我运行了这个项目并最终得到了这个(电影说明了一切,我想):
答案 1 :(得分:0)
我解决了你的问题。我所做的是,我在.xaml上绑定了ListPicker Itemsource而不是后面的代码,它完美地工作。
这是您在提供的文件中编辑的.xaml代码:
<toolkit:ListPicker ItemsSource="{Binding LstCountry}" SelectedIndex="55" x:Name="listPickerCountrySignup" Height="72" HorizontalAlignment="Left" Margin="14,43,0,0" VerticalAlignment="Top" Width="436" FullModeHeader="Select Country" Background="White" BorderBrush="White" CacheMode="BitmapCache" >
.xaml.cs代码
public partial class MainPage:PhoneApplicationPage,INotifyPropertyChanged { //构造函数 公共MainPage() { 的InitializeComponent(); BindList中(); this.DataContext = this; }
public class country
{
public int CountryID { get; set; }
}
public event PropertyChangedEventHandler PropertyChanged;
void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != handler)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
List<country> _lstCountry;
public List<country> LstCountry
{
get{return _lstCountry;}
set{
if(_lstCountry!=value)
{
_lstCountry = value;
NotifyPropertyChanged("LstCountry");
}
}
}
void BindList()
{
LstCountry = new List<country>();
for (int i = 0; i <= 100; i++)
{
LstCountry.Add(new country { CountryID = i });
}
}
private void button1_Click(object sender, RoutedEventArgs e)
{
listPickerCountrySignup.SelectedIndex = 15;
}
private void button2_Click(object sender, RoutedEventArgs e)
{
listPickerCountrySignup.SelectedIndex = 25;
}
private void button3_Click(object sender, RoutedEventArgs e)
{
listPickerCountrySignup.SelectedIndex = 39;
}
private void button4_Click(object sender, RoutedEventArgs e)
{
listPickerCountrySignup.SelectedIndex = 55;
}
private void button5_Click(object sender, RoutedEventArgs e)
{
listPickerCountrySignup.SelectedIndex = 75;
}
}