【问题标题】:Binding MvvmCross TextColor not work for Android绑定 MvvmCross TextColor 不适用于 Android
【发布时间】:2018-09-13 11:15:10
【问题描述】:

我收到以下警告:

  • [WARN] (MvxBind) 无法为绑定创建目标绑定 MvxValueConverterValueCombiner 组合器操作的 TextColor

绑定代码:

<TextView 
            android:id="@+id/text_view_header"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="4dp"
            style="@style/text_group_header"
            app:MvxBind="Text DisplayHeader; TextColor AppointmentFeedHeaderGroupColor(StartTime)"
        />

AppointmentFeedHeaderGroupColorValueConverter.cs

public class AppointmentFeedHeaderGroupColorValueConverter: MvxValueConverter<DateTime, Color>
    {
        private static readonly IDateTimeService DateTimeService = Mvx.Resolve<IDateTimeService>();
        private static readonly Color HeaderGroupBlack = GetColor(Resource.Color.black);
        private static readonly Color HeaderGroupRedLight = GetColor(Resource.Color.red_light);

        protected override Color Convert(DateTime value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value != DateTimeService.Now.Date)
            {
                return HeaderGroupRedLight;
            }

            return HeaderGroupBlack;
        }

        private static Color GetColor(int resourceColorId)
        {
            var context = Mvx.Resolve<IMvxAndroidCurrentTopActivity>().Activity;

            return new Color(ContextCompat.GetColor(context, resourceColorId));
        }
    }

我在文件 LinkerPleaseInclude.cs 中添加了以下代码。

public void Include(TextView text)
{
    text.AfterTextChanged += (sender, args) => text.Text = "" + text.Text;
    text.Hint = "" + text.Hint;

    text.SetTextColor(Color.Black);
    var tc = text.TextColors;
    text.SetTextColor(tc);
} 

没用

【问题讨论】:

  • 可以添加你用来绑定TextColor的代码吗?
  • @fmaccaroni,添加了绑定代码。
  • 要完全理解这个问题,您可以添加 AppointmentFeedHeaderGroupColorConverter 吗?
  • @fmaccaroni,已添加。

标签: linker runtime-error mvvmcross


【解决方案1】:

首先,检查您是否在Android 项目和PCL/NetStandard 项目中都安装了MvvmCross.Plugin.Color。

那么您的转换器应该在您的 PCL/NetStandard 项目中并从 MvxColorValueConverter&lt;DateTime&gt; 继承,这样您的颜色就不会依赖于您的平台:

public class AppointmentFeedHeaderGroupColorValueConverter: MvxColorValueConverter<DateTime>
{
    private static readonly IDateTimeService DateTimeService = Mvx.Resolve<IDateTimeService>();
    private static readonly MvxColor HeaderGroupBlack = new MvxColor(0,0,0);
    private static readonly MvxColor HeaderGroupRedLight = new MvxColor(255,0,0); // red_light, should see how to convert this to RGB values

    protected override MvxColor Convert(DateTime value, object parameter, CultureInfo culture)
    {
        if (value != DateTimeService.Now.Date)
        {
            return HeaderGroupRedLight;
        }

        return HeaderGroupBlack;
    }
}

最后,像现在一样使用颜色转换器:

TextColor AppointmentFeedHeaderGroupColor(StartTime)

更多信息:

MvvmCross Color docs

MvvmCross.Plugin.Color.MvxColorValueConverter.cs

这里有 MvvmCross 提供的完整的 LinkerPleaseInclude 文件。

嗨

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多