TableView(Subtitle)MVVM中的图像

时间:2015-01-21 15:34:56

标签: uitableview mvvm xamarin mvvmcross

这似乎是一个愚蠢的问题,但我很难找到正确的答案。我正在使用MVVMCross和Xamarin为iOS编写应用程序。在应用程序中,我想使用标准字幕单元格样式的TableView。我能够成功绑定到标题和详细信息文本,但到目前为止,将Image绑定到本地文件是不成功的。我看到的大多数示例都是使用从网络中提取的图像,而在这里我想使用Resources文件夹中的图像。我也试图避免编写自定义单元格。

如何使用MVVMCross和Xamarin将本地图像绑定到标准的字幕单元格样式?

有问题的代码行:

var source = new MvxStandardTableViewSource (TableView, UITableViewCellStyle.Subtitle, new NSString( "CellID" ), "ImageURL Image; TitleText Title; DetailText EventDate");

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用转换器执行此操作:

public class ItemTypeToImageValueConverter : IMvxValueConverter
{
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string assetName = "unknown";

            switch ((ItemType)value) {
            case ItemType.SOMETHING:
                assetName = "something";
                break;
            default:
                throw new ArgumentOutOfRangeException ();
            }

            return "res:item_" + assetName + ".png";
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
}

然后将其绑定到您的UI:

private readonly MvxImageViewLoader typeImageViewLoader;

public ItemItemTableViewCell(IntPtr handle)
            : base(handle)
        {
            typeImageViewLoader = new MvxImageViewLoader(() => BackgroundImageView);

            this.DelayBind(() =>
                {
                    var set = this.CreateBindingSet<ItemItemTableViewCell, Item>();
                    set.Bind(typeImageViewLoader).To(vm => vm.Type).WithConversion("ItemTypeToImage");
                    set.Apply();
                });
        }