2016-04-01 2 views
4

У меня есть привязка MvvmCross MvxSpinner в Android. Пользователь выбирает значение и получает отражение в моей собственности MealTypeSelected.Начальная величина MvxSpinner

<MvxSpinner 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    local:MvxBind="ItemsSource MealTypeList;SelectedItem MealTypeSelected, Mode=TwoWay" /> 

Вращатель позволяет пользователю выбрать тип питания (завтрак, обед, ужин и т. Д.). Тип еды представлен Enum под названием MealType.

public enum MealType {Unspecified, Breakfast, Lunch, Dinner, Snack};

Я хочу, чтобы сделать его легче на пользователе инициализации блесны до значения на основе времени суток, когда ViewModel показано. Поэтому, если страница загружена в полдень, я думаю, что выбор должен быть, например, «Обедом».

Проблема заключается в том, я попытался установить MealTypeSelected свойство в ViewModel в разных местах жизненного цикла: конструктор, Init и Start. Но независимо от того, что я делаю, когда View load, он меняет выбор назад на значение по умолчанию Enum, которое является значением «Unspecified».

Есть ли способ обойти это поведение и присвоить значение MvxSpinner конкретному значению?

+1

Из того, что я помню, автоматический счетчик выбирает начальное значение в своем ItemsSource. Вы можете инициализировать ItemsSource для Spinner, чтобы первый индекс был конкретным MealType для времени суток. – pnavk

+0

Это сработало, но теперь мой список счетчиков - «Обед, Unspecified, завтрак, обед, ужин, закуска», когда пользователь нажимает на него. Думаю, я мог бы сделать некоторые пользовательские макеты, чтобы прояснить, но это меньше, чем идеально. – thedigitalsean

ответ

0

Переполнение стека не позволит мне принять комментарий pnavk в качестве ответа, но это то, что я закончил делать. Каждый раз, когда пользователь выбирал что-то, я бы изменил первый элемент в списке на то, что было выбрано. Уродливое решение, но оно сработало. Если это неприемлемо для других, похоже, что вам, возможно, придется выполнить некоторые пользовательские привязки.

1

Попробуйте добавить это в файл "Setup.cs". У меня была такая же борьба, и это сработало для меня. Не могу вспомнить, где я нашел решение в первый раз.

protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry) 
    { 
     MvxAppCompatSetupHelper.FillTargetFactories(registry); 
     base.FillTargetFactories(registry); 
    } 
+0

Я тоже споткнулся об этой проблеме в прошлом, но, к счастью, уже имел это в моей Setup.cs. Связывание не работает вообще, если у вас это нет. В моем случае привязка работает, но я не могу установить начальный выбор на что-либо, кроме первого значения List. – thedigitalsean

+0

Не могли бы вы попытаться обновить вопрос со свойствами в своей модели? – Stupidus

1

У меня была аналогичная проблема при привязке SelectedItem MvxSpinner к моей ViewModel, а также установка его в ViewModel.

Переопределение Equals типа, в котором я был привязан для исправления этой проблемы.

public override bool Equals(object obj) 
{ 
    return this.Id == (obj as MyType)?.Id; 
} 

Поскольку вы, кажется, связывание непосредственно перечисления, вы, возможно, придется попробовать и обернуть его в другом объекте.

+0

Это настоящий ответ. Переупорядочить список является обходным путем. – Jerome2606

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