当使用后面的代码触发时,Xamarin.forms将变量传递给轻击手势

时间:2015-11-16 05:52:15

标签: xamarin.forms uitapgesturerecognizer

我有一个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?
 }

2 个答案:

答案 0 :(得分:0)

当您引用Command时,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。

答案 1 :(得分:0)

我不认为这是最好的解决方案,但可以解决。

下面的“tableView.Root [0] .Add(vc);”,你可以把这行:

tableView.Root [0].Last().GestureRecognizers.Add(new TapGestureRecognizer() {
                                          Command = new Command(TapL_Tapped),
                                          CommandParameter =   filterList[m].filterName
});

不要忘记删除已存在的“新TapGestureRecognizer”。

我希望我能帮到你。 拥抱!