Windows phone 7 当ItemsSource绑定到从服务获取的数据时,ListPicker不会“勾选”所选项目
我按照的说明在multiselect ListPicker中绑定SelectedItems 当我将ItemsSource绑定到ViewModel中创建的对象的ObservableCollection时,ListPicker可以正常工作。然而,当我将ItemsSource绑定到从WCF服务获取的ObservableCollection时,问题就开始了。ListPicker正确显示所有项目,也可以选择这些项目并在主屏幕上显示为已选择。但当我再次单击选取器进行选择时,ListPicker无法在模板上“勾选”所选项目 我可以重写从服务中获取的所有元素的列表,但我想知道是否有一种简洁的方法来解决这个问题 项目信息:WP 7.0、WCF服务、EntityFramework、大量咖啡 实体类:Windows phone 7 当ItemsSource绑定到从服务获取的数据时,ListPicker不会“勾选”所选项目,windows-phone-7,multi-select,listpicker,Windows Phone 7,Multi Select,Listpicker,我按照的说明在multiselect ListPicker中绑定SelectedItems 当我将ItemsSource绑定到ViewModel中创建的对象的ObservableCollection时,ListPicker可以正常工作。然而,当我将ItemsSource绑定到从WCF服务获取的ObservableCollection时,问题就开始了。ListPicker正确显示所有项目,也可以选择这些项目并在主屏幕上显示为已选择。但当我再次单击选取器进行选择时,ListPicker无法在模板上“
DataContract(IsReference=true)]
public class TypeOfDish
{
[DataMember]
public int TypeOfDishID { get; set; }
[DataMember]
public string NameToDisplay { get; set; }
}
WCF服务:
[ServiceContract]
public interface IMyService
{
[OperationContract]
[ApplyDataContractResolver]
IEnumerable<TypeOfDish> GetDishTypes();
}
视图模型
public ObservableCollection<TypeOfDish> DishTypeList
{
get
{
//myModel.DichTypes is loaded with data from calling
//GetDishTypesAsync() on my service client
return myModel.DishTypes;
}
}
ObservableCollection<object> _selectedDishes = new ObservableCollection<object>();
public ObservableCollection<object> SelectedDishTypes
{
get { return _selectedDishes; }
set
{
if (_selectedDishes == value) { return; }
_selectedDishes = value;
RaisePropertyChanged("SelectedDishTypes");
}
}
我刚刚找到了解决办法 每次加载页面时,我都从服务中获取数据。从ListPicker中的完整模式模板返回时,重新加载主页面,使用新获取的数据重置DishTypesList属性。尽管仍然设置了ListPicker.SelectedItems,但新对象与其中的对象不匹配
我只需要将加载数据移动到视图模型构造函数中,ListPicker就开始正常工作。听起来很奇怪,所以除非看到一些代码,否则我们无法知道。只是添加了一些代码。希望有人能发现问题所在。
public class ListPickerExtended : ListPicker
{
public new IList SelectedItems
{
get
{
return (IList)GetValue(SelectedItemsProperty);
}
set
{
base.SetValue(SelectedItemsProperty, value);
}
}
}
public ObservableCollection<TypeOfDish> DishTypeList
{
get
{
//myModel.DichTypes is loaded with data from calling
//GetDishTypesAsync() on my service client
return myModel.DishTypes;
}
}
ObservableCollection<object> _selectedDishes = new ObservableCollection<object>();
public ObservableCollection<object> SelectedDishTypes
{
get { return _selectedDishes; }
set
{
if (_selectedDishes == value) { return; }
_selectedDishes = value;
RaisePropertyChanged("SelectedDishTypes");
}
}