【问题标题】:Using ListPicker and DataBinding使用 ListPicker 和 DataBinding
【发布时间】:2012-03-16 22:26:54
【问题描述】:

好的。我放弃。 我想在我的一个 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&lt;Category&gt;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 的用法还不是很了解。

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

  • 达米安,感谢您的意见。您的回复还有助于在正确的位置初始化 SelectedCategory 属性。肖恩和你的回答都让我解决了这个问题。具有讽刺意味的是,我无法将您的两个回答都标记为答案。认为自己也被标记了。
【解决方案2】:

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

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

【讨论】:

  • 那是一个错字。我从吸气剂中删除了这条线。还是同样的错误。我会查看您发布的链接。
  • 我在自己的应用程序中使用“相同”代码的 ListPickers。我尝试添加与没有 FullModeItemTemplate 相同的 xaml(因为我不知道它是什么)。如果您选择的项目不是包含在集合中的项目,则唯一会出现错误。您可以将所选项目设为空,但它不能是不在集合中的项目
  • 非常感谢您的指导。加载屏幕时,我没有正确分配 SelectedCategory。这引起了很多头痛。您的回复给了我一个视角,并引导我找到错误的正确方法!非常感谢。现在让我去用头撞墙! :)
猜你喜欢
  • 2017-09-19
  • 2019-03-24
  • 1970-01-01
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多