2015-11-08 4 views
1

Использование Xamarin.Android с MVVMCross. Когда выберите значение из MVXSpinner, которое не привязывается к SelectedYear. Недвижимость в модели. Когда загружается отладчик страницы, входит в SelectedYear Свойство, но когда я выбираю значение из счетчика, оно хочет попасть в SelectedYear. У меня нет ошибок. Пожалуйста, помогите мне, где я ошибаюсь.MvxSpinner Binding Issue on Xamarin.Android MVVMCross

Найдено Binding выпуск на выходном окне

MvxBind: Внимание: 228,30 Не удалось создать цель связывания для связывания SelectedItem для SelectedYear [0:] MvxBind: Внимание: 228,30 Не удалось создать цель связывания для связывания SelectedItem для SelectedYear 11-09 11: 50: 03,756 I/моно-стандартный вывод (32419): MvxBind: Внимание: 228,30 Не удалось создать цель связывания для связывания SelectedItem для SelectedYear

<LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#FFFFFF" 
     android:orientation="vertical" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="50dp"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/Retread.Collection.UI.DroidPhone.DotYear" 
      style="@style/LabelTextView" /> 
     <MvxSpinner 
      android:id="@+id/txtYear" 
      android:layout_width="20dp" 
      android:layout_height="wrap_content" 
      android:overlapAnchor="false" 
      local:MvxItemTemplate="@drawable/year_spinner" 
      local:MvxDropDownItemTemplate="@drawable/year_spinnerdropdown" 
      android:hint="@string/Retread.Collection.UI.DroidPhone.Year" 
      local:MvxBind="ItemsSource Year;SelectedItem SelectedYear" 
      style="@style/AppSpinnerStyle" /> 

Year_spinner.xml файла ниже.

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:local="http://schemas.android.com/apk/res-auto" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="18dip" 
     android:singleLine="true" 
     android:textColor="#000000" 
     local:MvxBind="Text DisplayYear"/> 

год_spinnerdropdown.xml файл Ниже.

<?xml version="1.0" encoding="utf-8"?> 
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:local="http://schemas.android.com/apk/res-auto" 
    style="?android:attr/spinnerDropDownItemStyle" 
    android:singleLine="true" 
    android:background="#ffffff" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:ellipsize="marquee" 
    local:MvxBind="Text DisplayYear" /> 

В модели вида у меня следующие свойства. И в модели года у меня есть свойство DisplayYear.

private List<YearModel> _Year; 
      public List<YearModel> Year 
      { 
       get 
       { 
        return _Year; 
       } 
       set 
       { 
        _Year = value; 
        RaisePropertyChanged(() => Year); 
       } 
      } 

     public YearModel SelectedYear 
     { 
      get 
      { 
       return Model.SelectedYear; 
      } 
      set 
      { 
       Model.SelectedYear = value; 
       RaisePropertyChanged(() => SelectedYear); 
      } 
     } 
+0

Вы не разъясняете, что здесь не так. Каков ожидаемый результат? Что ты видишь? Почему это неправильно? – Cheesebaron

+0

Ожидаемый результат: при отправке формы мне нужно значение привязки (выбранное значение) в свойстве SelectedYear. Но я не получил никаких значений (null) в свойстве SelectedYear. Что я вижу, когда я выбираю значение из раскрывающегося списка. Никакое событие не запускается в ViewModel в свойство SelectedYear. Я не знаю, где я допустил ошибку. – Dino

+0

Покажите нам свой код YearModel. – PmanAce

ответ

1

Возможно, если я отправлю что-то, что работает для меня, это может указывать на вас в правильном направлении.

Вертушка:

<Mvx.MvxSpinner 
    style="@style/spinner" 
    android:background="@drawable/spinner_selector" 
    local:MvxItemTemplate="@layout/item_spinner" 
    local:MvxBind="ItemsSource Position; SelectedItem SelectedPosition" 
    android:id="@+id/positionSpinner" /> 

MvxItemTemplate:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:local="http://schemas.android.com/apk/res-auto" 
    style="@style/Spinner.MyPlayers" 
    android:singleLine="true" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/dummy_title" 
    local:MvxBind="Text Caption" /> 

ViewModel:

protected int SelectedPositionId 
{ 
    get { return SelectedPosition == null ? 1 : SelectedPosition.Index; } 
} 

protected SpinnerItem _selectedPosition; 
public virtual SpinnerItem SelectedPosition 
{ 
    get { return _selectedPosition; } 
    set 
    { 
     if (_selectedPosition != value) 
     { 
      _selectedPosition = value; 

      SettingsPreferences.SelectedPosition = SelectedPositionId; 

      RebuildLists(true); 

      RaisePropertyChanged(() => SelectedPosition); 
      RaisePropertyChanged(() => DisplayCleanSheets); 
      RaisePropertyChanged(() => FilteredPlayers); 
     } 
    } 
} 

List<SpinnerItem> _position; 
public List<SpinnerItem> Position 
{ 
    get 
    { 
     if (_position != null) 
      return _position; 

     _position = new List<SpinnerItem>(); 

     var values = (int[])Enum.GetValues(typeof(PositionEnumeration)); 

     foreach (var val in values.Where(p => p > 0)) 
      _position.Add(new SpinnerItem(val, SharedTextSource.GetText(Enum.GetName(typeof(PositionEnumeration), val)))); 

     return _position; 
    } 
} 

SpinnerItem:

public class SpinnerItem 
{ 
    public SpinnerItem(int index, string caption, int primaryKeyId = 0, string tag = "") 
    { 
     Index = index; 
     Caption = caption; 
     PrimaryKeyId = primaryKeyId; 
     Tag = tag; 
    } 

    public int Index { get; private set; } 

    public string Caption { get; private set; } 

    public string Tag { get; private set; } 

    public int PrimaryKeyId { get; private set; } 

    public override string ToString() 
    { 
     return Caption; 
    } 

    public override bool Equals(object obj) 
    { 
     var rhs = obj as SpinnerItem; 

     if (rhs == null) 
      return false; 

     return rhs.Caption == Caption; 
    } 

    public override int GetHashCode() 
    { 
     return Caption == null ? 0 : Caption.GetHashCode(); 
    } 
} 
1

Ответ здесь https://github.com/MvvmCross/MvvmCross-AndroidSupport/issues/80

Вам нужно будет позвонить MvxAppCompatSetupHelper.FillTargetFactories из ваших Setup.cs. Может быть, мы можем автоматизировать это через плагин архитектуры?

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/11254333) – maazza

+1

@maazza он уже не содержит ответа? «Вам нужно будет вызвать MvxAppCompatSetupHelper.FillTargetFactories из вашего Setup.cs" –

Смежные вопросы