2012-03-16 46 views
2

好的。我放棄。 我想在我的一個Windows Phone應用程序中使用ListPicker控件。我收到一個異常SelectedItem必須始終設置爲有效值使用ListPicker和DataBinding

這是我的XAML一塊ListPicker的:

<toolkit:ListPicker x:Name="CategoryPicker"          
      FullModeItemTemplate="{StaticResource CategoryPickerFullModeItemTemplate}" 
      Margin="12,0,0,0"          
      ItemsSource="{Binding CategoryList}"           
      SelectedItem="{Binding SelectedCategory, Mode=TwoWay}" 
      ExpansionMode="ExpansionAllowed"  
      FullModeHeader="Pick Categories" 
      CacheMode="BitmapCache" 
      Width="420" 
      HorizontalAlignment="Left" /> 

CategoryList是我的ViewModel的ObservableCollection<Category>SelectedCategory是我的ViewModel類型的屬性。

這是怎麼了,宣佈雙方所屬分類和SelectedCategory:

private Category _selectedCategory;// = new Category(); 


     private ObservableCollection<Category> _categoryList = new ObservableCollection<Category>(); 

     public ObservableCollection<Category> CategoryList 
     { 
      get 
      { 
       return _categoryList; 
      } 

      set 
      { 
       _categoryList = value; 
       RaisePropertyChanged("CategoryList"); 
      } 
     } 


     public Category SelectedCategory 
     { 
      get 
      { 
       return _selectedCategory; 
      } 
      set 
      { 
       if (_selectedCategory == value) 
       { 
        return; 
       } 
       _selectedCategory = value; 

       RaisePropertyChanged("SelectedCategory"); 
      } 
     } 

感謝您的幫助!也許我還沒有很好地理解ListPicker的用法。

+0

您好@RajeevNair,你能分享你的答案?我也有一個像你一樣的問題http://stackoverflow.com/questions/15058162/listbox-navigation-page-mvvm-light-in-windows-phone – yudayyy 2013-02-25 20:29:07

回答

1

看看我這個問題的答案: Silverlight ComboBox binding with value converter

簡短的回答是,所選擇的項目必須是包含在集合內的項目。你的getter將選定的項目設置爲一個新的對象。此新對象不包含在集合內

+0

這是一個錯字。我從getter中刪除了這一行。還是一樣的錯誤。我會研究你發佈的鏈接。 – 2012-03-16 22:52:07

+0

我在我自己的應用程序中使用「相同」代碼的ListPickers。我嘗試添加相同的xaml,因爲您沒有FullModeItemTemplate(因爲我不知道它是什麼)。只有當您選擇的項目不是集合中包含的項目時,纔會出現錯誤。您可以將所選項目設置爲空,但它不能是不在收藏集中的項目 – 2012-03-17 05:08:15

+0

非常感謝您的指導。加載屏幕時,我沒有正確分配SelectedCategory。這導致了很多頭痛。你的迴應給了我一個觀點,並引導我找到錯誤的正確方法!非常感謝。現在讓我走,把我的頭撞在牆上! :) – 2012-03-17 19:06:37

2

我期望SelectedCategory返回的對象是來自CategoryList集合中的對象之一。在你的例子中,你正在實現它的instanciating,所以這絕對不是這種情況。

如果所屬分類中包含一些值,那麼也許初始化_selectedCategory爲空,然後在得到

if(_selectedCategory == null) { 
    _selectedCategory = CategoryList.First(); 
} 
+1

達米安,感謝您的意見。您的迴應也有助於在正確的位置初始化SelectedCategory屬性。肖恩和你的迴應都導致我糾正了這個問題。具有諷刺意味的是,我不能將你的答案標記爲答案。考慮自己也標記。 – 2012-03-17 19:07:31