Sul*_*van 2 silverlight-toolkit windows-phone-7 listpicker
我在WCF中有一个类:
[DataContract]
public class Usuario
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string Nombre { get; set; }
[DataMember]
public string Contraseña { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在WP7 Proyect中从WCF读取ObservableCollection并加载ListPicker:
lpUsuarios.ItemSource = listUsuarios;
Run Code Online (Sandbox Code Playgroud)
这项工作还可以.
现在,在WP7中使用"Usuario _usuario = new Usuario()"作为局部变量.
问题是,如果我使用IsolatedStorage保存变量_usuario然后加载并应用: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();
}
Run Code Online (Sandbox Code Playgroud)
现在,关闭应用程序,然后打开:
private void ButtonLoad_Click(object sender, RoutedEventArgs e)
{
settings.TryGetValue<Usuario>("test", out _usuario);
lpUsuarios.SelectedItem = _usuario; <--- ERROR SelectedItem must....
}
Run Code Online (Sandbox Code Playgroud)
在vs2010调试中,当打开应用程序并加载变量_usuario时,值是正确的,但不起作用.
错误:在ListPicker.cs中,SelectedItem必须始终设置为有效值
ListPicker.cs中的位置:
// Synchronize SelectedIndex property
if (!_updatingSelection)
{
_updatingSelection = true;
SelectedIndex = newValueIndex;
_updatingSelection = false;
}
Run Code Online (Sandbox Code Playgroud)
¿任何解决方案?
链接示例: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();
}
Run Code Online (Sandbox Code Playgroud)
在WLC类中,在ModelView中实现它?
在XAML中使用:
SelectedItem={Binding SelectedUser, Mode=TwoWay}"
Run Code Online (Sandbox Code Playgroud)
在ModelView中使用:
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"));
}
}
}
Run Code Online (Sandbox Code Playgroud)
WCF类:
[DataContract]
public class Usuario
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string Nombre { get; set; }
[DataMember]
public string Contraseña { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
谢谢
您的收藏集没有您要选择的项目.即使看起来一样,闻起来也一样,但它是一个不同的对象.您的Users类必须为此重写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();
}
}
Run Code Online (Sandbox Code Playgroud)