You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MvxSpinner绑定ItemsSource属性失效问题排查求助

解决MvxSpinner绑定后不显示数据的问题

看起来你在使用MvvmCross的MvxSpinner时遇到了数据不显示的问题,而手动设置Adapter的普通Spinner却能正常工作。结合你的代码情况,我整理了几个最可能遗漏的配置和步骤,你可以逐一排查:

1. 确保视图继承自MvvmCross的基类

MvvmCross的数据绑定系统依赖于它自身的视图基类来处理绑定上下文。如果你的Activity还是继承自普通的Activity或AppCompatActivity,绑定逻辑根本不会生效。你需要改成继承MvxActivity(如果用AppCompat库则继承MvxAppCompatActivity),示例代码如下:

public class TripPlanActivity : MvxActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        // 通过MvvmCross方式关联视图与ViewModel
        SetContentView<TripPlanViewModel>(Resource.Layout.your_plan_layout);
    }
}

2. 修正布局中的自定义属性命名空间

你当前布局里的local命名空间是硬编码的包名:

xmlns:local="http://schemas.android.com/apk/lib/com.myco.app"

这种写法很容易因包名变更而出错,MvvmCross现在推荐用res-auto自动识别自定义绑定属性,修改为:

xmlns:mvx="http://schemas.android.com/apk/res-auto"

之后绑定属性就用mvx:MvxBind,能有效避免包名相关的问题。

3. 确保视图与ViewModel正确关联

如果你的Activity没有正确关联到对应的ViewModel,MvxSpinner根本找不到Items这个数据源。除了上面提到的SetContentView<YourViewModel>方式,也可以通过MvvmCross的导航服务打开页面,确保ViewModel实例被正确传递给视图。

4. 添加ItemTemplate(可选但推荐)

虽然MvxSpinner默认有基础项模板,但自定义模板能更可靠地解决渲染问题。你可以给MvxSpinner指定一个ItemTemplate:

<MvxSpinner 
    android:id="@+id/spinner1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:prompt="@string/planet_prompt" 
    mvx:MvxBind="ItemsSource Items"
    mvx:MvxItemTemplate="@layout/item_simple_text" />

然后创建item_simple_text.xml布局文件:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="12dp"
    android:textSize="16sp"
    mvx:MvxBind="Text ." />

这里的Text .表示直接绑定到集合中每个字符串元素本身。

5. 检查MvvmCross初始化是否完成

确保你的应用已经正确初始化MvvmCross,比如在Setup类中完成必要配置:

public class Setup : MvxAndroidSetup<App>
{
    public Setup(Context applicationContext) : base(applicationContext)
    {
    }
}

并在Application类中初始化:

[Application]
public class YourApp : MvxAndroidApplication<Setup, App>
{
    public YourApp(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
    {
    }
}

你可以先从第1、2条开始排查,这两个是最常见的绑定失效原因。如果还是不行,可以在ViewModel的Items属性getter里加个断点,看看是否被调用——要是没触发,说明绑定上下文没建立,重点排查视图基类和ViewModel关联的问题。

内容的提问来源于stack exchange,提问作者Klaus Nji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:01:37