Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows phone 7 当ItemsSource绑定到从服务获取的数据时,ListPicker不会“勾选”所选项目_Windows Phone 7_Multi Select_Listpicker - Fatal编程技术网

Windows phone 7 当ItemsSource绑定到从服务获取的数据时,ListPicker不会“勾选”所选项目

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无法在模板上“

我按照的说明在multiselect ListPicker中绑定SelectedItems

当我将ItemsSource绑定到ViewModel中创建的对象的ObservableCollection时,ListPicker可以正常工作。然而,当我将ItemsSource绑定到从WCF服务获取的ObservableCollection时,问题就开始了。ListPicker正确显示所有项目,也可以选择这些项目并在主屏幕上显示为已选择。但当我再次单击选取器进行选择时,ListPicker无法在模板上“勾选”所选项目

我可以重写从服务中获取的所有元素的列表,但我想知道是否有一种简洁的方法来解决这个问题

项目信息:WP 7.0、WCF服务、EntityFramework、大量咖啡

实体类:

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");
    }
}