MonoTouch.Dialog如何从对话框中获取数据



我是MonoTouch和MonoTouch.Dialog的初学者。我正在尝试使用MT对话框,但我不明白如何输入和输出数据。

假设我有事件类:

class Event {
 bool type {get;set;}
 string name {get;set;}
}

我想用这个对话框定义来编辑它:

        return new RootElement ("Event Form") {
        // string element
            new Section ("Information"){
                new EntryElement ("Name", "Name of event", ""),
                new RootElement ("Type", new RadioGroup (0)){
                    new Section (){
                        new RadioElement ("Concert"),
                        new RadioElement ("Movie"),
                        new RadioElement ("Exhibition"),
                        new RadioElement ("Sport")
                    }
                }
            },

如何将数据传递到此表单和从该表单传递数据?(使用低级API,而不是支持绑定的反射)

很容易,将中间值分配给变量:

Section s;
SomeElement e;
return new RootElement ("Foo") {
    (s = new Section ("...") {
        (e = new StringElement (...))
    })
 };

您可以这样做:

    //custom class to get the Tapped event to work in a RadioElement
    class OptionsRadioElement: RadioElement
    {
            public OptionsRadioElement(string caption, NSAction tapped): base(caption)
            {
                Tapped += tapped;
            }
    }
//Custom Controller
public class MyController: DialogViewController
{
    private readonly RadioGroup optionsGroup;
    private readonly EntryElement nameField; 

    public MyController(): base(null)
    {
      //Note the inline assignements to the fields
        Root = new RootElement ("Event Form") {  
          new Section ("Information"){
            nameField = new EntryElement ("Name", "Name of event", ""),
            new RootElement ("Type", optionsGroup = new RadioGroup (0)){
                new Section (){
                    new OptionsRadioElement("Concert", OptionSelected),
                    new OptionsRadioElement("Movie", OptionSelected),
                    new OptionsRadioElement("Exhibition", OptionSelected),
                    new OptionsRadioElement("Sport", OptionSelected)
                }
            }
        };
    }
    private void OptionSelected()
    {
        Console.WriteLine("Selected {0}", optionsGroup.Selected);
    }

    public void SetData(MyData data)
    {
            switch(data.Option)
            {
                case "Concert:
                    optionsGroup.Selected = 0;
                    break;
                case "Movie":
                    optionsGroup.Selected = 1;
                    break;
                  //And so on....
                default:
                    optionsGroup.Selected = 0;
                    break;
            }
            nameField.Value = data.Name;
            ReloadData();
    }
}

最新更新