代码之家  ›  专栏  ›  技术社区  ›  Pat Long - Munkii Yebee

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

  •  0
  • Pat Long - Munkii Yebee  · 技术社区  · 7 年前

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

    我有一些来自ViewModels的字符串属性示例,这些示例将受益于使用不同格式(如粗体或红色)选择字符串的不同部分。

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

    第0页,共5页

    然而,有时物业需要说明

    第5期,共5期!重新订购!

    虽然这两个值都来自IssueState属性,但显示 !重新订购! 在里面 大胆的 或者可能是前景为红色的“5/5”。

    另一个例子是 FoundIn a的性质 SearchResultViewModel 其中值为

    在名称、地址和状态中找到

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

    在中找到 名称 , 住址 地位

    我不想将属性拆分为多个属性,因为这太笨重了,会把ViewModel搞砸

    如何解决这个问题的建议?我也不想在ViewModels中嵌入太多的UI格式

    我目前的想法是复制iOS SDK NSAttributedString 它是相关“属性”的范围属性。NSAttribute String非常以用户界面为中心,因此我允许任何接近如此多格式的地方。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Pat Long - Munkii Yebee    7 年前

    我去了一个 AttributedStringViewModel 最后,它将文本作为字符串保存,然后具有一个列表的只读属性(在ctor中设置) StringFormattingAttribute

    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 适用于