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
属性:构造函数、Init
和 Start
。但无论我做什么,当视图加载时,它都会将 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;
}
由于您似乎直接绑定到一个枚举,您可能必须尝试将它包装在另一个对象中。
我在 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
属性:构造函数、Init
和 Start
。但无论我做什么,当视图加载时,它都会将 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;
}
由于您似乎直接绑定到一个枚举,您可能必须尝试将它包装在另一个对象中。