使用后台代码触发时,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 iOS 在唤醒时冻结

Xamarin Forms - 每 10 秒获取一次设备位置(当应用程序在前台/后台运行时)

Xamarin.Forms 中的 Device.StartTimer 与 System.Threading.Timer [关闭]

Xamarin.Forms iOS - 当设备连接互联网时开始上传数据,即使应用程序当前未处于活动状态或处于后台也是如此