我在StringElement
中继承了MonoTouch.Dialog
。
在那里,我可以附加到Tapped
事件,或者我可以覆盖Selected()
。
如果点击元素,两者都会触发。
但是,Selected()
允许我访问该元素所属的DialogViewController
,其中此信息不会传递给Tapped
事件。
这里的逻辑是什么?元素是否应该知道它的DialogViewController
?如果是:如何从Tapped
事件中获取控制器呢?
答案 0 :(得分:1)
通过查看Github上的源代码找到自己。
触发Tapped
事件的唯一位置来自Selected()
。所以我认为Tapped应该是EventHandler
类型而不是Action。
public override void Selected (DialogViewController dvc, UITableView tableView, NSIndexPath indexPath)
{
if (Tapped != null)
Tapped ();
tableView.DeselectRow (indexPath, true);
}
答案 1 :(得分:1)
在我编写代码的时候,想法就是使用lambdas,你可以将你需要的任何状态传递给你的Tapped处理程序,而不使用object / EventArgs模式。
所以你会做类似的事情:
var dialogViewController = CreateDvC ();
new StringElement ("....", () => {
// reference any variables here
// my container is:
Console.Writeline (dialogViewController);
}