有没有办法可以在模型中使用Color属性来填充模型的另一个属性

时间:2017-12-13 19:25:00

标签: c# model-view-controller

我有这个模型类BrandColors。我想从颜色填充属性HexCode和RGBCode。有没有办法做到这一点。

public class BrandColors :CSSItem
{   
    public Color color { get; set; }    
    public string RGBCode { get; set; }
    public string HexCode { get; set; }

    public BrandColors()
    {
        HexCode = color.Name.PadLeft(6, '0');
    }
   }
  }

我有另一个模型,我将填充它

    private void InitializeBrandColors()
    {
        BrandColors.Add(new BrandColors()
        {
            color = Color.FromArgb(0,0,51,0),            
        });
         BrandColors.Add(new BrandColors()
        {
            color = Color.FromArgb(0,82,72,53),
        });
      }

在视图中,我可以访问颜色对象的属性,如

         @brandcolor.color.Name.PadLeft(6, '0')<br>
        RGB brandcolor.color.R,@brandcolor.color.G,@brandcolor.color.B

但我想做一些像直接访问

的事情
     @brandcolor.HexCode
     @brandcolor.RGBCode

1 个答案:

答案 0 :(得分:0)

如果唯一的实际后备数据是color属性,则将您的其他属性设为只读计算属性。像这样:

public class BrandColors :CSSItem
{   
    public Color color { get; set; }    
    public string HexCode
    {
        get { return color.Name.PadLeft(6, '0'); }
    }
    // something similar for RGBCode, however you calculate that
}

基本上你不应该尝试在多个地方复制信息。即使信息以不同方式呈现,唯一的实际信息就是Color。其他一切都只是基于此的计算。在多个地方保持相同的信息意味着保持同步,这会迅速升级问题。

毕竟,如果在set上调用了HexCode,会发生什么?然后模型将处于无效状态。如果计算属性只有get而没有set,那么这种情况就不会发生。使用代码只能set color属性,其他属性会自动反映该更改。