在MVVM跨平台场景中标记文本

时间:2017-10-19 20:07:16

标签: xamarin model-view-controller mvvm cross-platform

我们的产品通过PCL使用Models和ViewModels的共享代码库,支持iOS,Android和Windows。

我有来自那些ViewModel的字符串属性的示例,这些属性可以通过使用不同的格式(如粗体或红色)选择字符串的不同部分而受益。

一个例子是这个字符串,它是部件发出的次数。 ViewModel中的属性是

  

发布0 of 5

但有时候酒店需要说

  

最后第5期5期!重新订购!

虽然这两个值都来自IssueState属性,但在粗体中显示!重新排序!或者使用前景红色显示“5 of 5”可能很有用

另一个示例是FoundIn的{​​{1}}属性,其值为

  

找到姓名,地址和状态

在这里,我们想要加粗“姓名”,“地址”和“状态”部分

  

名称地址状态

中找到

我不想将属性拆分为多个属性,因为它很笨拙并且混淆了IMHO的ViewModel

有关如何解决此问题的建议?我也不想在ViewModels

中嵌入过多的UI格式

我目前的想法是复制iOS SDK的NSAttributedString及其相关“属性”的范围属性。 NSAttributedString非常以UI为中心,所以我允许接近那么多格式化。

1 个答案:

答案 0 :(得分:0)

我最后选择AttributedStringViewModel将文本保存为字符串,然后在StringFormattingAttribute

列表中设置了只读属性(在ctor中设置)
public class StringFormattingAttribute
{
    public StringFormattingAttribute(FormattingType type, FormattingRange range)
    {
        this.Type = type;
        this.Range = range;
    }

    public FormattingType Type { get; }

    public FormattingRange Range { get; }
}

FormattingRange类保存StringFormattingAttribute适用于

的文字字符串的开头和结尾位置

在iOS中我有一个MVVMCross转换器转换为NSAttributedString