MvxSpinner 初始值

MvxSpinner Initial Value

我在 Android 中有一个 MvvmCross MvxSpinner 绑定。用户 select 是一个值,它反映在我的 属性 MealTypeSelected 中。

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

旋转器允许用户select膳食类型(早餐、午餐、晚餐等)。膳食类型由名为 MealType 的枚举表示。

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

我想通过将微调器初始化为一个基于显示 ViewModel 的时间的值来让用户更轻松。因此,如果页面是在中午加载的,我猜 selection 应该是 "Lunch"。

问题是,我尝试在生命周期的不同位置设置 ViewModel 中的 MealTypeSelected 属性:构造函数、InitStart。但无论我做什么,当视图加载时,它都会将 selection back 更改为 Enum 的默认值,即值 "Unspecified"。

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

尝试将其添加到您的 "Setup.cs" 文件中。我有同样的挣扎,这对我有用。不记得我第一次在哪里找到解决方案。

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

Stack Overflow 不允许我接受 pnavk 的评论作为答案,但我最终还是这样做了。每次用户选择某些东西时,我会将列表中的第一项更改为所选内容。一个丑陋的解决方案,但它奏效了。如果其他人不能接受,那么您可能需要进行一些自定义绑定。

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

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

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

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