2012-04-17 121 views
2

我有一個項目,需要將一個字符串列表綁定到一個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)); 
     } 
    } 
} 

回答

1

我複製你的代碼,並得到了相同的問題。只需從

刪除 Style="{StaticResource PhoneTextLargeStyle}"
<DataTemplate> 
<TextBlock Text="{Binding}" Margin="24,0,0,0" /> 
</DataTemplate> 

看起來像它可以解決問題。然而,它是一個奇怪的行爲,它的來源來自Style屬性。

我會嘗試其他的可能性,並會讓你知道,如果我會發現一些其他的信息。

問候,

+1

刪除樣式並沒有解決我的問題。你能重新檢查它對你有用嗎? – Girish 2012-04-17 11:06:20

+1

哎呀..突然它不起作用。讓我看看這裏發生了什麼... – 2012-04-17 11:32:33

+1

嗨,再次。我花了一些時間試圖弄清楚這裏發生了什麼,我真的很驚訝。沒有辦法解決它。我想這應該是一個錯誤,但不能相信目前沒有人遇到這個問題。 – 2012-04-17 11:50:35

1

我已經提交了一個補丁被描述爲項目 http://www.codeplex.com/Download?ProjectName=silverlight&DownloadId=375366 如下:

有導航充分選擇器頁面,當比賽條件,其中即有其rotationX屬性中的項目在調用UpdateOutOfViewItems委託之前,動畫旋轉它們可能已離開屏幕。

因此,有些項目可能會保留爲-90的RotationX。

我的解決方案是在創建動畫時將可見的項目列表傳遞給UpdateOutOfView項目,而不是在代理最終運行時收集那些可見的項目。

http://www.codeplex.com/Download?ProjectName=silverlight&DownloadId=375366是修復該錯誤所需的更新的ListPickerPage.xaml.cs文件。