如何将数据传递到MonoTouch.Dialog的委托?

给定以下代码,如何将“First Name”,“Last Name”等数据传递到我的方法BookASession.SendMessage();

 RootElement CreateBookASessionRoot() { return new RootElement("Book a Session") { new Section() { new EntryElement("First Name", "First Name", ""), new EntryElement("Last Name", "Last Name", ""), new EntryElement("Email", "Email", "") { KeyboardType = UIKeyboardType.EmailAddress }, new DateElement("Event Date", DateTime.Now), new RootElement ("Type of Shoot", new RadioGroup (0)){ new Section (){ new RadioElement("Wedding"), new RadioElement("Portrait"), new RadioElement("Boudoir"), new RadioElement("Other") } } , new EntryElement("Message", "Message", "") } , new Section () { new StringElement("Send", delegate { BookASession.SendMessage(); } ) } }; } 

我想要实现这一点的方法是保持对我的输入元素的引用。 这样我就可以轻松获取其输入值,而无需搜索整个元素树。 我是通过将特定屏幕的创建逻辑封装在单独的clase中来实现的,如下所示:

 public class BookASessionScreen { private RootElement _root = null; private EntryElement _firstName = null; private EntryElement _lastName = null; private EntryElement _email = null; private DateElement _date = null; private RootElement _typeOfShoot = null; private EntryElement _message = null; private void CreateRoot() { _firstName = new EntryElement("First Name", "First Name", ""); _lastName = _firstName = new EntryElement("First Name", "First Name", ""); _email = new EntryElement("Email", "Email", "") { KeyboardType = UIKeyboardType.EmailAddress }; _date = new DateElement("Event Date", DateTime.Now); _typeOfShoot = new RootElement ("Type of Shoot", new RadioGroup (0)){ new Section () { new RadioElement("Wedding"), new RadioElement("Portrait"), new RadioElement("Boudoir"), new RadioElement("Other") } }; _message = new EntryElement("Message", "Message", ""); _root = new RootElement("Book a Session") { new Section() { _firstName, _lastName, _email, _date, _typeOfShoot, _message } , new Section () { new StringElement("Send", delegate { //BookASession.SendMessage(_firstName.Value, _lastName.Value, ...) }) } }; } public RootElement Root { get { if (_root == null) { CreateRoot(); } return _root; } } } 

此外,您可能希望通过让类公开事件来解耦表单处理逻辑,如下所示:

1 – 创建一个包含事件数据的类,扩展EventArgs:

 public class BookASessionArgs : EventArgs { public string FirstName { get; set; } public string LastName { get; set; } public string Email { get; set; } } 

2 – 在BookASessionScreen中声明您的事件:

 public event EventHandler BookASession; 

3 – 在您的代表中触发事件

 if (BookASession != null) { BookASession(this, new BookASessionArgs() { FirstName = _firstName.Value, LastName = _lastName.Value //.. }); } 

可以通过在具有焦点的元素上调用ResignFirstResponder方法来解决值属性未更新的问题。 我想这是iOS特有的。

Interesting Posts