在多步应用程序中存储用户输入的最佳方法

时间:2014-05-27 09:25:58

标签: c# winforms wizard

我的程序包含许多步骤。假设每个步骤都在tabpage中,完成后,用户选择“下一步”。 存储这些信息的最佳/最快方式是什么?

4 个答案:

答案 0 :(得分:1)

我通常会说这将是一个保留所有数据的模型 - 一旦用户在最后一页上说“ok”,它就会被转发到处理方法。 BUt那么这在很大程度上取决于实际的使用场景,所以这可能不是最好的方式。

答案 1 :(得分:0)

我创建了一个单独的类,它在各个页面上具有“答案”的属性。不确定这是否是最好的方法,但它对我来说非常有效。用户可以在页面之间来回切换并存储答案。对普雷斯科特来说,如果他们需要稍后回来,也许你可以将他们的部分形式保存为XML。

答案 2 :(得分:0)

创建一个代表向导的viewmodel,并在该viewmodel中创建与您的步骤相关的所有数据。您还可以跟踪当前步骤,并实现一些方法来启用/禁用下一个和上一个按钮等。

您的实际向导窗口和选项卡(视图)然后都可以使用向导视图模型(数据)。

答案 3 :(得分:0)

如果您只想保留此信息以执行程序,我会选择In-Memory Repository,例如

namespace Repository {
    public class InMemoryRepository : IRepository{
        static readonly List<Item> items = new List<Item> {
            new Item("CurrentTaxRate", 20m),
            new Item("CurrentAmount", 100m)
        };
        public Item Get(string name) {
            return items.Single(x => x.Name == name);
        }
    }
}

public class Item {
    public Item(string name, decimal value) {
        Name = name;
        Value = value;
    }
    public string Name { get; private set; }
    public decimal Value { get; private set; }
}

您可以轻松地添加,删除或编辑功能,并使用您自己的“UserData”类型替换此处的“项目”。

使用依赖注入来获取此信息

    public class TaxRate : ITaxRate {
        private readonly IRepository repository;

        public TaxRate(IRepository repository) {
            this.repository = repository;
        }

        public decimal Get() {
            var item = repository.Get("CurrentTaxRate");
            return item.Value;
        }
    }