MvxSpinner初始值

时间:2016-04-01 14:58:22

标签: xamarin xamarin.android mvvmcross android-spinner

我在Android中有一个MvvmCross MvxSpinner绑定。用户选择一个值并反映在我的属性MealTypeSelected中。

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

微调器允许用户选择膳食类型(早餐,午餐,晚餐等)。膳食类型由称为MealType的枚举表示。

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

我希望通过将微调器初始化为基于显示ViewModel的时间的值来使用户更容易。因此,如果页面在中午加载,我猜测选择应该是“午餐”。

问题是,我尝试在生命周期的不同位置MealTypeSelected设置ViewModel属性:构造函数,InitStart。但无论我做什么,当View加载时,它会将选择返回更改为Enum的默认值,即值“Unspecified”。

是否可以解决此问题,并将MvxSpinner初始化为特定值?

3 个答案:

答案 0 :(得分:1)

尝试将此添加到您的&#34; Setup.cs&#34;文件。我有同样的斗争,这对我有用。不记得我第一次找到解决方案的地方。

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

答案 1 :(得分:1)

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

覆盖我绑定的类型的Equals修复此问题。

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

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

答案 2 :(得分:0)

Stack Overflow不会让我接受pnavk的评论作为答案,但这是我最终做的。每次用户选择某些内容时,我会将第一个项目更改为列表以选择所选内容。一个丑陋的解决方案,但它工作。如果其他人不接受,看起来您可能需要进行一些自定义绑定。