如何绑定使用转换器格式化的文本

本文关键字:转换器 格式化 文本 何绑定 绑定 | 更新日期: 2023-09-27 18:32:55

我有两个关键字列表,我必须显示一个字符串,其中不常用单词为白色,常用单词为橙色。

我做了一个转换器来做到这一点。一开始,我尝试制作一个 SpannableString 来返回带有一些颜色属性的字符串,但绑定似乎很复杂,所以我尝试在我的字符串中放入一些 html 代码并返回一个 ISpanned 字符串。

它有效,但什么都没有显示,我不明白为什么...

为了进行绑定,我使用以下代码:

            set.Bind(poiDisplayer).For(s=>s.Text).To(vm => vm.CurrentMember.Member.PostedBy.Interests).WithConversion(new CommonPOIConverter(ViewModel.CurrentMember.Member.Interests)).WithFallback(new List<Interests>());

转换器是这样的:

protected override ISpanned Convert(List<Interests> value, Type targetType, object parameter, CultureInfo culture)
    {
        string finalString = ""; string tmpString = "";
        for (int i = 0; i < value.Count; i++)
        {
            tmpString = "";
            foreach (var item in myInterestes)
            {
                if (item.Name == value[i].Name)
                {
                    tmpString += "<font color='"orange>'"#" + value[i].Name + "</> ";
                    break;
                }
            }
            if (tmpString.Length == 0)
                tmpString += "<font color='"white>'"#" + value[i].Name + "</> ";
            finalString += tmpString;
        }
        return Html.FromHtml(finalString);
    }

关于如何使这项工作的任何想法?

如何绑定使用转换器格式化的文本

考虑到您的MvxValueConverter按预期工作,您需要将值绑定到 TextFormatted 属性而不是 Text ,如下所示:

set.Bind(poiDisplayer).For(s=>s.TextFormatted).To(vm => vm.CurrentMember.Member.PostedBy.Interests).WithConversion(new CommonPOIConverter(ViewModel.CurrentMember.Member.Interests)).WithFallback(new List<Interests>());