通过MvvmCross视图模型更改CardView背景颜色

时间:2015-11-13 04:02:15

标签: c# android xamarin mvvmcross android-cardview

我正在尝试将我的CardView的背景颜色绑定到我的视图模型,但是我从Mvx那里得到了这个错误:

  

MvxBind:警告:11.66无法为绑定创建目标绑定   CardBackgroundColor

我不确定我是否在AXML或视图模型中使用了错误的属性绑定。

以下是我试图将其绑定到视图模型中的属性:

public int EventEntryBackgroundColour
{
    get
    {
        return IsRead
            ? Resource.Color.yellow
            : Resource.Color.White;
    }
}

我也尝试使用它作为字符串类型来返回 HEX 中的颜色,但它仍然不起作用。

这是属性,我在CardView上设置

cardview:MvxBind="CardBackgroundColor EventEntryBackgroundColour"

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。我的解决方案......

<强>转换器:

Android.Graphics.Color

<强> XML:

local:MvxBind="BackgroundColor...

我们无法将BackgroundColor属性绑定到NativeColor,因为MvxColor属性要求您使用使用local:MvxBind="Background...的{​​{1}}转换器。 但是,ColorDrawable属性需要drawable,因此我使用绑定var userDate = moment().set({ 'year': oTextY.innerHTML, 'month': oTextMi.innerHTML + 1, 'day': oTextDi.innerHTML });

答案 1 :(得分:0)

您需要查看MvvmCross的值转换器:https://github.com/MvvmCross/MvvmCross/wiki/Value-Converters#the-mvx-color-valueconverters

使用它们可以设置这样的颜色:

local:MvxBind="BackgroundColor NativeColor(CurrentColor)"

或者对于iOS:

set.Bind(field)
   .For(field => field.BackgroundColor)
   .To(vm => vm.CurrentColor)
   .WithConversion("NativeColor");

和Windows:

Fill="{Binding CurrentColor, Converter={StaticResource NativeColor}}"

答案 2 :(得分:0)

我刚刚为我的cardview定义了一个子类,它有一个自己的属性,因为你似乎无法直接访问它,否则我似乎找不到绑定了吗?

public class BindableColorCardView: CardView
{
    private Color m_cCardViewColor;
        public Color CardViewColor
    {
        get { return m_cCardViewColor; }
        set
        {
            m_cCardViewColor = value;
            SetCardBackgroundColor(m_cCardViewColor);
        }
    }

然后只使用带有ValueConverter的binded属性。

答案 3 :(得分:0)

我知道这是很久以前问过的,但也许可以帮助到别人。

现在的答案是,您需要使用 CardViewBackgroundColor 而不是 CardBackgroundColor

因此,您的情况应该是:

cardview:MvxBind="CardViewBackgroundColor EventEntryBackgroundColour"

您应该将其绑定到Android.Graphics.Color,但是整数。 为此,您可以创建一个如下所示的转换器类:

public class BackgroundColorConverter : MvxValueConverter<bool, Color>
{
    protected override Color Convert(bool value, Type targetType, object parameter, CultureInfo culture)
    {
        return value ? Color.Black : Color.White;
    }
}

您也可以从xaml调用此转换器,并从ViewModel传递布尔值以显示正确的颜色。示例:

cardview:MvxBind="CardViewBackgroundColor BackgroundColor(Selected)"