windowsphone 7-如何最好地表示C#中的表单字段

本文关键字:表单 字段 表示 何最好 地表 windowsphone | 更新日期: 2023-09-27 18:00:36

我开始学习C#for WP7,我正在制作一个应用程序来抓取各种网站,并在页面上显示一些信息。

我将允许用户在手机上创建多个"帐户"——每个帐户都是特定网站的一组登录详细信息。例如,如果我使用stackoverflow作为例子,我会有一个类:

public abstract class MyBaseClass
{
    public Dictionary<string, string> fields;
}
public class StackOverflow : MyBaseClass 
{
   public StackOverflow()
   {
       fields.Add("Username", "Default Username");
       fields.Add("Password", "");
   }
}

这个课程将完成所有的工作,我希望人们能够提交新的课程,以便在以后的版本中包含。

应用程序将遍历每个字段,向用户显示适当的表单字段。一旦完成,UI将更新字典,准备开始抓取。

一开始使用字典似乎还可以,但我没有想过如何表示数据类型——我想定义输入应该是文本、数字还是密码。

如何最好地包含这些数据?

windowsphone 7-如何最好地表示C#中的表单字段

鉴于屏幕截图往好里说是糟糕的,往坏里说是灾难性的,我必须建议您只包括提供公共文档API的站点(或服务ecs),然后使用该引用来定义您存储的数据类型。

也就是说,如果您使用的是C#/.NET 4,您可能希望使用Tuple数据类型。

使用此模式需要记住的一点是,您对该对象所做的几乎所有操作都基于"魔术串"。字符串数据很少可以在编译时进行检查;作为字符串引用的字段名可能存在拼写错误,编译器会立即发现该错误;类似地,将"ABC123"设置为一个本应是十进制的字段也很好,直到您尝试解析它为止。

如果你决定走这条路,我会把Dictionary改为一个自定义类的List,其中包含该字段的所有元数据;它的名称、类型、当前值等。列表应该受到保护,并通过从MyBaseClass类派生的类上的一个或多个索引器访问,该类可以根据情况根据索引位置或字段名称提取数据。

请注意,在更改为List时,天真的实现将导致字段的线性搜索时间,而Dictionary则为您提供对数访问时间。您可以通过对列表进行排序并实现BinarySearch来查找字段名称来减轻这种情况。

您必须创建自己的模型来表示这一点。只要做自然的、有意义的事。这个怎么样:

public enum InputType
{
    Text,
    Number,
    Password
}
public class Value
{
    public object Value { get; set;}
    public InputType InputType { get; set;}
}
public abstract class MyBaseClass
{
    public Dictionary<string, Value> fields;
}
public class StackOverflow : MyBaseClass 
{
   public StackOverflow()
   {
       fields.Add("Username", new Value() {
           Value = "Default Username",
           InputType = InputType.Text
       });
       fields.Add("Password", new Value() {
           Value = "hw78fksm9",
           InputType = InputType.Password
       });
   }
}

顺便说一句,不要将MyBaseClassfields变量公开,这是一个实现细节,应该隐藏/封装!