我在 WCF 有一堂课:
[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()”作为局部变量。
问题是,如果我用 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();
}
现在,关闭应用程序,然后打开:
private void ButtonLoad_Click(object sender, RoutedEventArgs e)
{
settings.TryGetValue<Usuario>("test", out _usuario);
lpUsuarios.SelectedItem = _usuario; <--- ERROR SelectedItem must....
}
在vs2010调试中,打开应用程序加载变量_usuario,值正确,但不起作用。
错误:在 ListPicker.cs 中必须始终将 SelectedItem 设置为有效值
ListPicker.cs 中的位置:
// Synchronize SelectedIndex property
if (!_updatingSelection)
{
_updatingSelection = true;
SelectedIndex = newValueIndex;
_updatingSelection = false;
}
有什么解决办法吗?
如果我使用 SelectedIndex,工作正常,谢谢 Etch。
但是现在,问题是如果我想使用:
public override bool Equals(object obj)
{
return ID == (obj as Users).ID;
}
public override int GetHashCode()
{
throw new NotImplementedException();
}
¿ 在 WCF 类中,在 ModelView 中在哪里实现?
在 XAML 中使用:
SelectedItem={Binding SelectedUser, Mode=TwoWay}"
在 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"));
}
}
}
WCF 类:
[DataContract]
public class Usuario
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string Nombre { get; set; }
[DataMember]
public string Contraseña { get; set; }
}