1

我在我的wp7應用程序中有listpicker控件。我想根據我的需要設置選定的索引。讓我們假設我有我的listpicker 100項目如果我設置選定的索引低於40它很好。但是,當我將Selected index設置爲50以上時,它將變爲空白,UI不會刷新,但在後端顯示正確的項目。設置設置選擇的索引後Listpicker變空

範例項目:http://yaariyan.net/Test_Project.rar

在這個項目中,你可以得到

  1. 所有源

  2. XAP文件來測試以及

  3. 重現步驟

  4. 快照的錯誤

只玩我的最後兩個按鈕,你可以很容易地重現問題。

我正在使用windows phone 7.1.1 SDK和Silverlight Took Kit 2011年11月版本。

DLL也是我的文件夾中,我在我的項目

+2

請將您的問題減少到最小的尺寸,但仍然存在問題。不,我不知道你的來源的大小,但鏈接到它導致我相信它不適合在這裏 - 一個好兆頭,這不是一個減少的問題。此外,沒有冒犯,但我不傾向於點擊今天和年齡的隨機鏈接... – 2012-08-11 18:20:48

+0

@lc。它只是一個頁面,其不超過1.5 MB,因爲它包含了我用於更好地糾正問題的silverlight工具包dll。我只是上傳了示例代碼,因爲它有很多版本,並且更改了silverlight套件。我正在使用11月份的verion官方的一個 – 2012-08-11 18:25:45

回答

0

我經歷過同樣的問題,我指。恐怕我還不能提出解決方案,但我已經縮小了這個問題的範圍。我可以驗證問題似乎發生在SelectedIndex 40和50之間(本例中爲48)。

我所做的只是簡單地創建一個新的WP解決方案,將兩個ListPicker控件添加到MainPage.xaml視圖,再加上一個按鈕。我通過代碼向這兩個列表中添加了50個字符串,並在第一個列表中將SelectedIndex設置爲0,並將第二個列表中的第一個列表設置爲0。

按鈕確實將selectedIndex屬性的這樣一個簡單的開關:

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     int tempindex = listPicker1.SelectedIndex; 
     listPicker1.SelectedIndex = listPicker2.SelectedIndex; 
     listPicker2.SelectedIndex = tempindex; 
    } 

我跑項目,結束了這個(電影說,這一切,我認爲):

http://screencast.com/t/T6mZ7FEdUF

+0

我整理了這個東西。它是silverlight工具包的listpicker控件中的一個bug。我在工具包的源代碼中進行了修改並修復了這個問題。將分享它,因爲我現在在手機上:) – 2012-08-19 05:14:45

+0

如果你能分享源代碼,我會愛上它! – heidgert 2012-08-20 17:29:31

+0

我已經在xaml上設置了itemSource綁定,而不是在xaml.cs上,它工作正常,請檢查其他答案。我希望它也適用於你 – 2012-08-21 02:58:25

0

我解決了你的問題。我所做的就是將ListPicker Itemsource綁定到.xaml上,而不是放在後面的代碼上,並且完美地工作。

這是您所提供的文件中編輯的.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代碼

公共部分類的MainPage:的PhoneApplicationPage,INotifyPropertyChanged的 {// 構造 公衆MainPage() { InitializeComponent(); BindList(); 這個。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; 
    } 
}