2012-03-16 3 views
2

Ok. Я сдаюсь. Я хочу использовать элемент управления ListPicker в одном из моих приложений для Windows Phone. Я получаю исключение 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 типа.

Это, как я заявляю, как CategoryList и 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

ответ

1

Взгляните на мой ответ на этот вопрос: Silverlight ComboBox binding with value converter

Короткий ответ в том, что выбранный элемент должен быть элемент, который содержится в коллекции. Ваш получатель устанавливает выбранный элемент в новый объект. Этот новый объект не содержится в коллекции

+0

, которая была опечаткой. Я удалил строку из получателя. По-прежнему такая же ошибка. Я посмотрю вашу ссылку, которую вы разместили. –

+0

Я использую ListPickers в своих приложениях с «тем же» кодом. Я попытался добавить тот же самый xaml, что и без FullModeItemTemplate (поскольку я не знаю, что это такое). Единственный раз, когда вы получаете ошибку, является то, что выбранный вами элемент не является элементом, который содержится в коллекции. Вам разрешено, чтобы выбранный элемент был пустым, но он не может быть элементом, который не находится в коллекции. –

+0

Большое спасибо за руководство. При загрузке экрана я неправильно присваивал выбранную категорию. И это вызывало много головных болей. Ваш ответ дал мне точку зрения и привел меня к правильному пути, чтобы найти ошибку! Большое спасибо. Теперь отпусти меня и удариться головой о стену! :) –

2

Я ожидаю, что объект, возвращенный SelectedCategory, станет одним из объектов из коллекции CategoryList. В вашем примере вы инициируете его в рамках get, так что это определенно не так.

Если CategoryList содержит несколько значений, то возможно инициализировать _selectedCategory до нуля, а затем в получить

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

Дамиан, спасибо за ваш вклад. Ваш ответ также помог в инициализации свойства SelectedCategory в нужном месте. И ответ Шона, и ваш ответ привели меня к правильной проблеме. Ирония заключается в том, что я не мог отследить ваш ответ как ответ. Считайте, что вы тоже отметились. –

Смежные вопросы