2

我在 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; }
   }
4

3 回答 3

6

您的收藏中没有您要选择的项目。即使看起来一样,闻起来一样,但它是一个不同的对象。您的 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();
        }
    }
于 2011-12-14T08:29:14.973 回答
0

您不能选择不属于绑定到 ItemsSource 的集合中的项目之一的项目。

于 2011-12-13T17:22:04.200 回答
-1

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

顺便说一句,我发现了关于这个确切主题的另一个问题。

于 2011-12-13T17:47:53.670 回答