2011-12-13 4 views
2

내가 WCF의 클래스가 "selectedItem가 항상 유효한 값으로 설정해야합니다" 이 작업은 정상입니다.ListPicker와는

이제 WP7 사용에서 "사용자 선호도 _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(); 
} 

를 연 다음, 응용 프로그램 등을 닫습니다 VS2010 디버그에서

private void ButtonLoad_Click(object sender, RoutedEventArgs e) 
{ 
    settings.TryGetValue<Usuario>("test", out _usuario);    
    lpUsuarios.SelectedItem = _usuario; <--- ERROR SelectedItem must.... 
} 

때 열려있는 응용 프로그램과 변수 _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를 사용하는 경우 ok, Etch에 감사드립니다. WCF 클래스에서 ¿,

public override bool Equals(object obj) 
    { 
     return ID == (obj as Users).ID; 
    } 

    public override int GetHashCode() 
    { 
     throw new NotImplementedException(); 
    } 

그것을 구현하는 경우 모델 뷰에 : 내가 사용하려는 경우

하지만 지금은 문제가 무엇입니까? 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 -must-always-be-a-valid-value) –

답변

6

귀하의 컬렉션을 선택하려는 항목이 없습니다. 외형이 같아도 냄새는 같지만 다른 대상입니다. 오버라이드 (override) 할 필요가 귀하의 사용자 클래스는이에 대한 방법을 같음 :

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

이 작업은 괜찮지 만 WCF에서 이것을 구현하는 방법은 무엇입니까? – Sulivan

0

그 th의 항목 중 하나가 아닙니다. e 컬렉션을 ItemsSource에 바인딩합니다.

+0

값 저장소는 어떻게 선택합니까? megaupload : www.megaupload.com/?d=XDZSU3P0에 예제를 추가했습니다. – Sulivan

-1

전날이 문제가 발생했습니다. 정확한 문제. Listpicker에 버그가 있습니다.집에있는 링크가있어 세부 정보가 표시되지만 간단한 해결 방법은 수행 한 작업을 수행하고 대신 SelectedIndex 속성을 사용하는 것입니다.

By the way I found another question on this exact topic.

+0

SelectedIndex를 PropertyChanged TwoWay 및 MVVM과 함께 사용하는 방법은 무엇입니까? MVVM을 사용하는 경우 listpicker.SelectedIndex = _usuario.ID에 대한 listpicker 객체에 액세스하지 않습니다. ¿? – Sulivan

+0

대신 SelectedIndex를 사용하면 해결 방법이 있지만 SelectedItem을 사용할 수도 있습니다. equals 메소드를 오버라이드하면됩니다. – derSteve

+0

그래,이게 내가 결국 내 문제를 해결하기 위해 한 것인데, 나는이 대답을 결코 삭제하지 않았다. – Etch