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