私は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();
}
ModelView の WCF クラスで、それをどこに実装しますか?
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; }
}