将Monotouch.Dialog元素值保存到文件中

时间:2013-03-18 16:42:04

标签: xamarin.ios monotouch.dialog

我正在使用MonoTouch开发我的iPhone应用程序。我想用Monotouch。用于向客户端显示某些数据并让他们更改数据然后再将其保存到文件的对话框。

我的代码类似于Xamarin教程的代码: (Orginal Sample link)

public enum Category
{
    Travel,
    Lodging,
    Books
}

public class ExpesObject{
    public string name;
}

public class Expense
{
    [Section("Expense Entry")]

    [Entry("Enter expense name")]
    public string Name;
    [Section("Expense Details")]

    [Caption("Description")]
    [Entry]
    public string Details;
    [Checkbox]
    public bool IsApproved = true;
    [Caption("Category")]
    public Category ExpenseCategory;
}

它代表TableView如此优秀。 但问题是,我们如何保存这些元素的数据并将其用于其他类应用程序?这样做的最佳方式是什么? 我想我们可以在用户更改数据时将数据保存到文件中。但我们如何检测用户何时更改数据?

1 个答案:

答案 0 :(得分:2)

在您显示的示例中,您正在使用Monotouch.Dialog的简单Reflection API。虽然这很简单,但它确实限制了你可以做的事情。我建议学习使用Monotouch.Dialog中的Elements API(http://docs.xamarin.com/guides/ios/user_interface/monotouch.dialog/elements_api_walkthrough),它可以让您对表中的每个项目进行更多控制,并能够检测到更改等。

每个表格单元格(例如,名称是一个单元格,您可以编辑)具有针对某些事情发生的操作/事件,例如文本被更改。

例如,可以使用元素API执行以下屏幕。

public class ExpenseViewController : DialogViewController
{
    EntryElement nameEntry;

    public ExpenseViewController() : base(null, true)
    {
        Root = CreateRootElement();

        // Here is where you can handle text changing
        nameEntry.Changed += (sender, e) => {
            SaveEntryData(); // Make your own method of saving info.
        };
    }

    void CreateRootElement(){
         return new RootElement("Expense Form"){
             new Section("Expense Entry"){
                 (nameEntry = new EntryElement("Name", "Enter expense name", "", false))
             },
             new Section("Expense Details"){
                 new EntryElement("Description", "", "", false),
                 new BooleanElement("Approved", false, ""),
                 new RootElement("Category", new Group("Categories")){
                     new CheckboxElement("Travel", true, "Categories"),
                     new CheckboxElement("Personal", false, "Categories"),
                     new CheckboxElement("Other", false, "Categories")
                 }
             }
         };
    }

    void SaveEntryData(){
        // Implement some method for saving data. e.g. to file, or to a SQLite database.
    }

}

考虑这些领域开始使用Elements API: 资料来源:https://github.com/migueldeicaza/MonoTouch.Dialog

MT.D简介:http://docs.xamarin.com/guides/ios/user_interface/monotouch.dialog

MT.D Elements演练:http://docs.xamarin.com/guides/ios/user_interface/monotouch.dialog/elements_api_walkthrough