2016-05-10 19 views
0

私は以下のUIを持っており、ユーザーがクリックするとジェンダーリストを表示します。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に対応する次に、関係なく、選択したどのようなユーザー、それは常に初期値を保持していません。たとえば、スピナーが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()。Gender' return?これは可能ですか?この値は "女性"ですか?つまり、スピナーは、ユーザーが選択したものに関係なく、選択された性別として常に「女性」を表示します。 – Plac3Hold3r

+0

はい "女性"を返しますが、それはちょうど得ていますか?私はスピナーを "Male"にしようとしています。ローカルデータベースには個人情報が格納されており、そのメソッドを呼び出してジェンダーの初期値を探します。つまり、変更または設定する前に、対応するジェンダー値を取得しようとしています。 – hotspring

+0

Spinner for Genderを使用する代わりに、代わりにラジオ・グループを使用するのはなぜですか?私はより直感的であることがわかります、また、 "他の"オプションを追加することを忘れないでください。 @ PlaceHold3rが示唆しているように、getterの中にあるモデルから 'a'が返ってきたときは、常にあなたの問題です。 – 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; 
    } 
} 

:デフォルトを含めることは、最初の男女オプションを選択

関連する問題