2

行。我放弃。我想在我的一个 Windows Phone 应用程序中使用 ListPicker 控件。我收到一个异常SelectedItem 必须始终设置为有效值

这是我的 ListPicker 的 XAML 片段:

<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" />

CategoryListObservableCollection<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 的用法还不是很了解。

4

2 回答 2

2

我希望 SelectedCategory 返回的对象是 CategoryList 集合中的对象之一。在您的示例中,您是在 get 中实例化它,所以绝对不是这种情况。

如果 CategoryList 包含一些值,那么也许将 _selectedCategory 初始化为 null,然后在 get

if(_selectedCategory == null) {
   _selectedCategory = CategoryList.First();
}
于 2012-03-16T22:33:58.900 回答
1

看看我对这个问题的回答: Silverlight ComboBox binding with value converter

简短的回答是所选项目必须是包含在集合中的项目。您的吸气剂正在将所选项目设置为新对象。这个新对象不包含在集合中

于 2012-03-16T22:32:12.367 回答