2016-04-01 76 views
4

我在Android中有一个MvvmCross MvxSpinner绑定。用户选择一个值,并反映在我的财产MealTypeSelectedMvxSpinner初始值

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

微调器允许用户选择膳食类型(早餐,午餐,晚餐等)。用餐类型由一个名为MealType的Enum代表。

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

我想通过初始化微调器根据一天的时间值时,显示的ViewModel,使其对用户更加容易。因此,如果网页在中午加载,那么我猜测选择应该是“午餐”。

的问题是,我试图在生命周期的不同位置设置在ViewModelMealTypeSelected属性:构造,InitStart。但是不管我做什么,当视图加载时,它会将选择返回更改为Enum的默认值,该值是“未指定”值。

是否有解决此问题的方法并已将MvxSpinner初始化为特定值?

+1

从我记得,微调自动在其ItemsSource中选择初始值。您可以初始化Spinner的ItemsSource,使第一个索引成为一天中特定的MealType。 – pnavk

+0

这个工作,但现在我的微调列表是“午餐,未指定,早餐,午餐,晚餐,小吃”,当用户点击它。我想我可以做一些自定义布局来澄清,但它不是理想的。 – thedigitalsean

回答

0

Stack Overflow不会让我接受pnavk的评论作为答案,但这是我最终做的。每次用户选择某项内容时,我都会将第一个项目更改为所选内容。一个难看的解决方案,但它的工作。如果这不被别人接受,看起来你可能不得不做一些自定义绑定。

1

尝试将其添加到“Setup.cs”文件中。我有同样的挣扎,这对我有效。无法记住我第一次找到解决方案的位置。

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

我也曾在这个问题上绊倒过,但幸运的是,在我的Setup.cs中已经有了。除非你有这个绑定,否则绑定根本不起作用。在我的情况下,绑定正在工作,但我无法将初始选择设置为列表的第一个值之外的任何内容。 – thedigitalsean

+0

你可以尝试使用viewmodel中的属性来更新问题吗? – Stupidus

1

当将MvxSpinner的SelectedItem绑定到ViewModel时,我也遇到了类似的问题,同时也将它设置在ViewModel中。

覆盖我绑定的类型的Equals解决了这个问题。

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

由于您似乎直接绑定到枚举,您可能需要尝试将其包装在另一个对象中。

+0

这是真正的答案。对列表重新排序是一种解决方法。 – Jerome2606