Monotouch.Dialog - 哪个元素被点击

Posted

技术标签:

【中文标题】Monotouch.Dialog - 哪个元素被点击【英文标题】:Monotouch.Dialog - Which Element was Tapped 【发布时间】:2011-04-18 08:39:53 【问题描述】:

我有一个客户列表,我用它来创建这样的元素:

Foreach(Customer c in Customers)

    //Make the StyledStringElement
    //Set the Tapped to action a touch
    element.Tapped += () =>   Push (new SomeController (c.ClientId)); ;

问题在于,当点击元素时,它会将最后一个客户发送到 SomeController()。

我如何使用能够识别客户的信息设置 Tapped Delegate?

【问题讨论】:

【参考方案1】:

您需要将客户作为循环中的局部变量:

foreach(Customer c in Customers)
    
    //Make the StyledStringElement
    //Set the Tapped to action a touch
    var currentCustomer = c;
    element.Tapped += () =>   Push (new SomeController (currentCustomer.ClientId)); ;

但这不是 MonoTouch.Dialog 的限制。 Here's 一篇关于一般问题的文章。

【讨论】:

那篇文章太棒了。过去我自己遇到过并解决了这个问题,但是 Resnik 的剖析很棒。基本细分: lamda 执行的操作是在运行时需要时立即创建的……此时 foreach 语句中的迭代器已经移动到集合的末尾……所以集合中的最后一个值将在 lamda 动作中使用。因此,需要局部变量将适当的值注入 lambda。

以上是关于Monotouch.Dialog - 哪个元素被点击的主要内容,如果未能解决你的问题,请参考以下文章

带有 MonoTouch.Dialog 的 UISplitViewController

MonoTouch.Dialog StyledStringElement

DateTimeElement (Monotouch.Dialog) 上缺少后退按钮

Monotouch.Dialog MultiLineElement

输入上方的 Monotouch.Dialog EntryElement 标签

MonoTouch.Dialog:在后台设置 StyledStringElement 的图像