casillas
casillas

Reputation: 16803

Spinner issue in the MVVMCross

I have the following UI, and it displays gender list when user clicks.

View.axml

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

However in the following corresponding ViewController, no matter what user chooses, it always keep the initial value. For example if spinner shows Female, even though user chooses Male, it keeps showing 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);
    }
}

Upvotes: 0

Views: 288

Answers (1)

Plac3Hold3r
Plac3Hold3r

Reputation: 5192

You could try using the backing field to return the user's selected option:

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;
    }
}

Edited: to include a default select first gender option

Upvotes: 1

Related Questions