2011-11-28 32 views
8

Tôi có Hộp thoại được tạo bởi MonoTouch.Dialog. Có một danh sách các bác sĩ trong một nhóm radio:MonoTouch.Dialog: Trả lời Lựa chọn Nhóm Radio

Section secDr = new Section ("Dr. Details") { 
     new RootElement ("Name", rdoDrNames){ 
      secDrNames 
    } 

Tôi muốn cập nhật một Element trong mã một lần Doctor đã được chọn. Cách tốt nhất để được thông báo rằng một số RadioElement đã được chọn là gì?

Trả lời

18

Tạo của riêng bạn RadioElement như:

class MyRadioElement : RadioElement { 
    public MyRadioElement (string s) : base (s) {} 

    public override void Selected (DialogViewController dvc, UITableView tableView, NSIndexPath path) 
    { 
     base.Selected (dvc, tableView, path); 
     var selected = OnSelected; 
     if (selected != null) 
      selected (this, EventArgs.Empty); 
    } 

    static public event EventHandler<EventArgs> OnSelected; 
} 

lưu ý: không sử dụng một sự kiện tĩnh nếu bạn muốn có nhóm nhiều hơn một đài phát thanh

Sau đó tạo một RootElement rằng sử dụng loại mới này , như:

RootElement CreateRoot() 
    { 
     StringElement se = new StringElement (String.Empty); 
     MyRadioElement.OnSelected += delegate(object sender, EventArgs e) { 
      se.Caption = (sender as MyRadioElement).Caption; 
      var root = se.GetImmediateRootElement(); 
      root.Reload (se, UITableViewRowAnimation.Fade); 
     }; 
     return new RootElement (String.Empty, new RadioGroup (0)) { 
      new Section ("Dr. Who ?") { 
       new MyRadioElement ("Dr. House"), 
       new MyRadioElement ("Dr. Zhivago"), 
       new MyRadioElement ("Dr. Moreau") 
      }, 
      new Section ("Winner") { 
       se 
      } 
     }; 
    } 

[UPDATE]

Đây là một phiên bản hiện đại hơn của RadioElement này:

public class DebugRadioElement : RadioElement { 
    Action<DebugRadioElement, EventArgs> onCLick; 

    public DebugRadioElement (string s, Action<DebugRadioElement, EventArgs> onCLick) : base (s) { 
     this.onCLick = onCLick; 
    } 

    public override void Selected (DialogViewController dvc, UITableView tableView, NSIndexPath path) 
    { 
     base.Selected (dvc, tableView, path); 
     var selected = onCLick; 
     if (selected != null) 
     selected (this, EventArgs.Empty); 
    } 
} 
+2

Đây sẽ là một bổ sung tuyệt vời để MT.Dialog như trong nhiều Line-of-kinh doanh các ứng dụng, sự lựa chọn của một lĩnh vực ảnh hưởng khác. Cảm ơn câu trả lời tuyệt vời của bạn! –

Các vấn đề liên quan