2016-05-10 2 views
0

У меня есть следующий пользовательский интерфейс, и при нажатии пользователем отображается гендерный список.Spinner issue в MVVMCross

View.axml

<mvvmcross.droid.support.v7.appcompat.widget.MvxAppCompatSpinner 
android:layout_width="80dp" 
android:layout_height="match_parent" 
local:MvxBind="ItemsSource GenderList; SelectedItem GenderCategory" /> 

Однако в следующем соответствующем ViewController, независимо от того, что пользователь выбирает, она всегда сохранять первоначальное значение. Например, если spinner показывает Female, даже если пользователь выбирает Male, он продолжает показывать Female.

ViewController.cs

private List<string> _genderList = new List<string>() { "Female", "Male" }; 

public List<string> GenderList 
{ 
    get { return _genderList ; } 
    set { _genderList = value; RaisePropertyChanged(() => GenderList); } 
} 

public string GenderCategory 
{ 
    get 
    { 
     var a = Model.Persons.Where(x => x.PId("12").FirstOrDefault().Gender; 
     if (a.Equals(Constants.Category.Female)) 
     { 
     return "Female"; 
     } 
     else 
     { 
      return "Male"; 
     } 
    } 
    set 
    { 
     if (value.Equals("Female")) 
      Model.SetGender(Constants.Category.Female, Person.Age); 
     else { 
      Model.SetGender(Constants.Category.Male, Person.Age); 
     } 
     RaisePropertyChanged(() => Gender); 
    } 
} 
+0

Что такое 'Model.Persons.Where (x => x.PId (" 12 "). FirstOrDefault(). Пол' return? Возможно ли t шляпа это значение «женщина»? Это означало бы, что счетчик всегда будет показывать «Женщина» как выбранный пол независимо от того, какой пользователь выбирает. – Plac3Hold3r

+0

yes Он возвращает «Female», но это просто получается, не так ли? Я пытаюсь установить spinner для «Male». Локальная база данных хранит информацию о человеке, и я вызываю этот метод, чтобы найти начальное значение пола, другими словами, я пытаюсь получить соответствующее гендерное значение перед тем, как изменить или установить его на что-то другое. – hotspring

+0

Вместо использования Spinner для Genders, почему бы вам не использовать Radio Group? Я нахожу это более интуитивным, также не забудьте добавить «Другой» вариант, потому что некоторые люди также не идентифицируют его. Как предлагает @ PlaceHold3r, вы всегда _ возвращаете все, что угодно, из вашей модели в ваш геттер, что, вероятно, является вашей проблемой. – Cheesebaron

ответ

2

Вы можете попробовать использовать поле подкладочный для возврата выбранного пользователя опции:

string _genderCategory; 
public string GenderCategory 
{ 
    get 
    { 
     return _genderCategory ?? GenderList.FirstOrDefault(); 
    } 
    set 
    { 
     if (value.Equals("Female")) 
      Model.SetGender(Constants.Category.Female, Person.Age); 
     else 
     { 
      Model.SetGender(Constants.Category.Male, Person.Age); 
     } 
     RaisePropertyChanged(() => Gender); 

     _genderCategory = value; 
    } 
} 

Отредактировано: включить по умолчанию выбрать первый вариант гендерной