通过转换器将多个属性绑定到一个值

时间:2016-03-09 10:51:19

标签: android binding xamarin converter mvvmcross

我正在使用MvvmCross 4并尝试绑定到axml中的ListView元素的backgroundColor。现在的问题是颜色取决于我的模型中的2个属性:bool IsSpecialCategory和bool IsNsfw - 每个组合应该得到另一种颜色。

在iOS中,使用流畅的语法,在转换器中使用整个模型没有问题,但这在Android中使用axml是否可行?最简单的解决方案是在项目布局中为转换器提供整个模型,而不仅仅是属性:

<LinearLayout [...]
local:MvxBind="backgroundColor ItemBackgroundColorConverter(theWholeModelNotJustAProperty)">

2 个答案:

答案 0 :(得分:1)

有两种可能的语法来绑定整个上下文。一个是省略财产,另一个是使用期间:

local:MvxBind="backgroundColor ItemBackgroundColorConverter(.)"
local:MvxBind="backgroundColor ItemBackgroundColorConverter()"

请注意,这适用于没有转换器的绑定

答案 1 :(得分:1)

当您可以传递额外参数时,无需将整个视图模型传递给转换器。 :)

local:MvxBind="BackgroundColor PlayerBackgroundColor(RowItem.RowId, PlayerListType)

和转换器:

public class PlayerBackgroundColorValueConverter : MvxColorValueConverter
{
    protected override MvxColor Convert(object value, object parameter, System.Globalization.CultureInfo culture)
    {
        var playerListType = (PlayerListType)parameter;

        if (parameter != null && playerListType == PlayerListType.AllPlayers)
            return BusinessConstants.Top10BGColor;

        if ((int)value <= 10)
            return BusinessConstants.Top10BGColor;
        else
            return BusinessConstants.MyPlayersBGColor;
    }
}
相关问题