2011-12-13 67 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

相關問題