使用后台代码触发时,Xamarin.forms 将变量传递给点击手势
Posted
技术标签:
【中文标题】使用后台代码触发时,Xamarin.forms 将变量传递给点击手势【英文标题】:Xamarin.forms pass in a variable to a tap gesture when triggered using behind code 【发布时间】:2015-11-16 05:52:14 【问题描述】:我有一个 for 循环,它将循环出 xaml.cs 中的每个视图单元格。我在标签上添加了一个点击手势,但我需要通过传入 FilterName 来区分点击的不同标签。
下面是我在 TableView 中循环出单元格的代码
for (int m = 0; m < filterList.Count; m++)
ViewCell vc = new ViewCell
View = new StackLayout
Orientation = StackOrientation.Horizontal,
HorizontalOptions = LayoutOptions.Start,
Children =
new Label ()
Text = " " + filterList[m].filterName,
YAlign = TextAlignment.Center,
GestureRecognizers =
new TapGestureRecognizer()
Command = new Command(TapL_Tapped),
CommandParameter = filterList[m].filterName
,
new Image ()
Source = FileImageSource.FromFile("check_mark.jpg"),
HorizontalOptions = LayoutOptions.EndAndExpand
;
tableView.Root [0].Add (vc);
如何将 filterList[m].filterName 传递给 TapL_Tapped 以将其用作字符串?我尝试使用命令参数,但我不确定它到底是做什么的。我试图谷歌如何使用这种方法传递变量但无济于事,希望有人能指导我吗?谢谢:)
以下是点击手势方法:
void TapL_Tapped()
//to do events here
//can i pass in the string here?
【问题讨论】:
【参考方案1】:当您引用命令时,Execute 函数通常接受对象参数。
在做
void TapL_Tapped(object parameter)
应该可以,但我目前没有快速的项目来测试。应该通过CommandParameter。
看看这个http://blogs.msdn.com/b/mikehillberg/archive/2009/03/20/icommand-is-like-a-chocolate-cake.aspx 会告诉你命令是如何工作的。
MVVMLight 等框架使用名为 RelayCommand 的类,它只实现了 ICommand。
【讨论】:
【参考方案2】:我认为这不是最好的解决方案,但可以解决。
在“tableView.Root[0].Add(vc);”下面,你可以这样写:
tableView.Root [0].Last().GestureRecognizers.Add(new TapGestureRecognizer()
Command = new Command(TapL_Tapped),
CommandParameter = filterList[m].filterName
);
别忘了删除已经存在的“新的 TapGestureRecognizer”。
我希望我有所帮助。 拥抱!
【讨论】:
以上是关于使用后台代码触发时,Xamarin.forms 将变量传递给点击手势的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xamarin.Forms.UITesting 中触发/调试后门功能?
xamarin/xamarin.forms 在锁屏电源唤醒时保持后台运行
Xamarin Forms - 每 10 秒获取一次设备位置(当应用程序在前台/后台运行时)
Xamarin.Forms 中的 Device.StartTimer 与 System.Threading.Timer [关闭]
Xamarin.Forms iOS - 当设备连接互联网时开始上传数据,即使应用程序当前未处于活动状态或处于后台也是如此