类设计处理多值选项和选定值的最佳方法是什么?

时间:2015-05-13 17:07:36

标签: c# class drop-down-menu interface

设计一个可以保存项目潜在价值的类(或类)以及用户实际选择的类的最佳方法是什么?我之前遇到过这个问题,并且总觉得我错过了核心类设计功能。

现在我经常做以下的事情

class MultiChoice
    Name (I.e. Box Size)
    Default Value ("22x15")
    PotentialValues ({"10x10","20x20","22x15"})

但是这并没有处理用户选择的实际值,所以我将其添加进去。

class MultiChoice
    Name (I.e. Box Size)
    Default Value ("22x15")
    PotentialValues ({"10x10","20x20","22x15"})
    SelectedValue

虽然感觉不对,但是当我构建一个下拉列表时,我会用SelectedValue = null填充内容。然后,当我存储数据时,我也存储了所有选项,这是我不需要的。

使用界面或其他语言构造处理此问题有更好的方法吗?我总觉得我错过了一些在这里显而易见的东西。

3 个答案:

答案 0 :(得分:0)

你真的有两个独立的实体:

  • MultiChoiceQuestion
  • MultiChoiceAnswer

创建两个单独的类来表示这两个独立的概念。

答案 1 :(得分:0)

ASP.NET MVC具有SelectList类。虽然你可能实际上并没有在ASP.NET MVC中工作,但很明显微软认为“支持下拉类”的概念足以保证其自己的类。

无论您认为“模型”(包含业务域类和业务逻辑的程序部分),总会存在数据库表作为这些下拉列表的查找。

tblCountries
     CountryID     PK
     CountryCode   string
     FullName      string

在您的ViewModel中,会有相应的国家/地区列表,您可以从中填充下拉列表:

public class InvoiceViewModel
{
    ...
    public int CountryID { get; set; }

    public SelectList Countries { get; set; }
    // or
    public List<Country> Countries { get; set; }

    ...
}

当然,当你到达用户界面时,实际的下拉列表包含足够的管道来保存选择列表和选定的值。

答案 2 :(得分:0)

您真的只需要一个Value字段。在构造函数中将它设置为您想要的任何内容(因此在创建对象时它是默认的)。您也可以将“潜在值”更改为静态,因此对整个班级来说都是一样的。

public class Box
    {
        public string Value { get; set; }
        public static List<string> AllowedValues { get; private set; }

        public Box()
        {
            AllowedValues.AddRange(new string[]{"10x10","20x20","22x15"});
            Value = AllowedValues.First();
        }
    }

然后,当用户更改该值时,只需更新它即可。

Box thisBox = new Box();
string val = "22x15";
if (Box.AllowedValues.Contains(val))
    thisBox.Value = val;