使用ListPicker和DataBinding

时间:2012-03-16 22:26:54

标签: windows-phone-7 mvvm-light listpicker

确定。我放弃。 我想在我的一个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" />

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的用法。

2 个答案:

答案 0 :(得分:2)

我希望SelectedCategory返回的对象是CategoryList集合中的一个对象。在你的例子中,你是在get中实现它,所以绝对不是这样。

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

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

答案 1 :(得分:1)

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

简短回答是所选项目必须是集合中包含的项目。您的getter将所选项目设置为新对象。此新对象不包含在集合