使用MvvmCross在CustomListView模板中更改ImageView Source

时间:2014-04-25 10:42:43

标签: android xamarin.android xamarin mvvmcross

尝试使用xamarin.android创建应用

我想为此创建一个列表视图,我已经创建了一个类似于下面的customTemplate

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="63dp">
    <ImageView
        android:src="@drawable/greenStripOnList"
        android:layout_width="9dp"
        android:layout_height="63dp"
        android:id="@+id/taskStatus"
        local:MvxBind="ImageUrl StatusColor(Flag)" />
</LinearLayout>

现在我在我的Actual ListView文件中调用上面的自定义模板,如下所示

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/background_light">
    <Mvx.MvxListView
        android:id="@+id/TaskListView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:cacheColorHint="#FFDAFF7F"
        local:MvxBind="ItemsSource RecordList"
        local:MvxItemTemplate="@layout/customtasklistview" />
</LinearLayout>

我创建了一个ValueConverter,它返回像

这样的Image Source
public class StatusColorValueConverter : MvxValueConverter<int, string>
    {
        protected override string Convert(int value, Type targetType, object parameter,   System.Globalization.CultureInfo culture)
        {
            string TaskStatus = string.Empty;
            switch ((int)value)
            {
                case 1:
                    TaskStatus = "@drawable/greenStripOnList";
                    break;
                case 2:
                    TaskStatus = "@drawable/yellowStripOnList";
                    break;

                case 3:
                    TaskStatus = "@drawable/redStripOnList";
                    break;
                default:
                    TaskStatus = "@drawable/greenStripOnList";
                    break;
            }
            return TaskStatus;
        }
    }

但我无法更改图像源......

请指导我需要改变哪些才能使其正常工作

只是想根据传递给StatusColor Converter的整数值来改变图像

感谢 阿曼

1 个答案:

答案 0 :(得分:1)

当您在axml中使用@drawable/greenStripOnList之类的字符串时,Android SDK工具会预处理axml(在应用程序编译之前)并获取这些字符串并将它们转换为资源的整数占位符。因此,您无法在运行时使用相同的格式字符串。

但是,MvvmCross下载缓存插件允许您使用Uri格式res:greenStripOnList来实现类似效果 - 请参阅https://github.com/MvvmCross/MvvmCross/blob/1ec7bc5f0307595c7ae11f56727dd0e9d2a2262f/Plugins/Cirrious/DownloadCache/Cirrious.MvvmCross.Plugins.DownloadCache.Droid/MvxAndroidLocalFileImageLoader.cs#L25中的实现

或者,ImageView的DrawableNameDrawableId绑定伪属性 - 您可以在https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding.Droid/MvxAndroidBindingBuilder.cs#L105

中看到他们的注册