2011-12-13 66 views
2

我在WCF类:ListPicker和 “的SelectedItem必须设置为一个有效的值”

[DataContract] 
public class Usuario 
{ 
    [DataMember] 
    public int ID { get; set; } 

    [DataMember] 
    public string Nombre { get; set; } 

    [DataMember] 
    public string Contraseña { get; set; } 
} 

在WP7 Proyect读取WCF的ObservableCollection和加载ListPicker有:

lpUsuarios.ItemSource = listUsuarios; 

这项工作确定。

现在,WP7使用“Usuario _usuario = new Usuario()”作为局部变量。

问题是,如果我将变量_usuario保存为IsolatedStorage,然后加载并应用于:lpUsuarios.SelectedItem = _usuario,则会导致错误:SelectedItem必须始终设置为有效值。

实施例:

Usuarios _usuario = new Usuario(); 

private void ButtonSave_Click(object sender, RoutedEventArgs e) 
{ 
    var settings = IsolatedStorageSettings.ApplicationSettings; 
    _usuario = lpUsuarios.SelectedItem as Usuario; 

    settings.Add("test", _usuario); 
    settings.Save(); 
} 

现在,关闭应用程序,然后打开:

private void ButtonLoad_Click(object sender, RoutedEventArgs e) 
{ 
    settings.TryGetValue<Usuario>("test", out _usuario);    
    lpUsuarios.SelectedItem = _usuario; <--- ERROR SelectedItem must.... 
} 

在VS2010调试,当打开的应用程序并加载变量_usuario,值是正确的,但不是工作。在

错误:的SelectedItem必须始终设置为有效值,在ListPicker.cs在ListPicker.cs

地点:

 // Synchronize SelectedIndex property 
     if (!_updatingSelection) 
     { 
      _updatingSelection = true; 
      SelectedIndex = newValueIndex; 
      _updatingSelection = false; 
     } 

¿任何解决方案?

链接举例:PhoneApp1.rar | 666.5 KB | www.megaupload.com/?d=XDZSU3P0

对不起,我的英语。


如果我使用SelectedIndex,工作好,谢谢Etch。

但现在的问题是,如果我想使用方法:

public override bool Equals(object obj) 
    { 
     return ID == (obj as Users).ID; 
    } 

    public override int GetHashCode() 
    { 
     throw new NotImplementedException(); 
    } 

如果实现的是,在¿WCF类,在模型视图?

在XAML中使用:

SelectedItem={Binding SelectedUser, Mode=TwoWay}" 

而且在模型视图使用:

private Usuario selectedUser; 
    public Usuario SelectedUser 
    { 
     get 
     { 
      return selectedUser; 
     } //----------------if i use modelview, the error is produced here 
     set 
     { 
      selectedUser= value; 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs("SelectedUser")); 
      } 
     } 
    } 

WCF类:

[DataContract] 
    public class Usuario 
    { 
     [DataMember] 
     public int ID { get; set; } 

     [DataMember] 
     public string Nombre { get; set; } 

     [DataMember] 
     public string Contraseña { get; set; } 
    } 

感谢

+0

可能重复[Listpicker错误的SelectedItem必须始终设置为有效值(http://stackoverflow.com/questions/7719682/listpicker-error-selecteditem必须始终设置为有效值) – 2014-01-19 19:50:30

回答

6

您的收藏没有,你要选择的项目。即使看起来一样,闻起来也一样,但它是一个不同的对象。您的用户类必须重载equals方法是:

public class Users 
    { 
     public int ID { get; set; } 
     public string Nombre { get; set; } 

     public override bool Equals(object obj) 
     { 
      return ID == (obj as Users).ID; 
     } 

     public override int GetHashCode() 
     { 
      throw new NotImplementedException(); 
     } 
    } 
0

你不能选择的项目是不是其中的一项e集合绑定到ItemsSource。

+0

我如何选择价值商店?我在megaupload中添加了一个示例:www.megaupload.com/?d=XDZSU3P0。 – Sulivan 2011-12-13 17:44:11

-1

前几天我遇到了这个问题。确切的问题。 Listpicker中存在一个错误。我在家里有一个链接,详细介绍了它的细节,但简单的解决方法是做你所做的事情,而不是使用SelectedIndex属性。

By the way I found another question on this exact topic.

+0

如何在PropertyChanged TwoWay和MVVM中使用SelectedIndex?如果我使用MVVM,我不访问listpicker.SelectedIndex = _usuario.ID的listpicker对象; ¿? – Sulivan 2011-12-13 18:31:54

+0

改为使用SelectedIndex是一种解决方法,但您也可以使用SelectedItem。只需重写equals方法即可。 – derSteve 2012-05-23 14:54:45

相关问题