Использование ListPicker и DataBinding - PullRequest
2 голосов
/ 17 марта 2012

Хорошо. Я сдаюсь. Я хочу использовать элемент управления ListPicker в одном из моих приложений для Windows Phone. Я получаю исключение Для SelectedItem всегда должно быть установлено допустимое значение .

Это мой 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 - это ObservableCollection<Category> в моей ViewModel. SelectedCategory - это свойство в моей ViewModel типа Category.

Вот как я объявляю и 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.

Ответы [ 2 ]

2 голосов
/ 17 марта 2012

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

Если CategoryList содержит некоторые значения, то, возможно, инициализировать _selectedCategory в null, а затем в get

if(_selectedCategory == null) {
   _selectedCategory = CategoryList.First();
}
1 голос
/ 17 марта 2012

Посмотрите на мой ответ на этот вопрос: Связывание Silverlight ComboBox с конвертером значений

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

...