如何将数据传递到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特有的。