我可以在Xamarin表单中从命令内访问绑定元素吗?

时间:2016-04-07 14:25:01

标签: mvvm xamarin xamarin.forms icommand

我有一个视图,其中的图像具有绑定到命令的点击手势:

查看:

var clickableImage = new Image(...);
var imageTap = new TapGestureRecognizer();
clickableImage.GestureRecognizers.Add(imageTap);
imageTap.SetBinding<MyViewModel>(TapGestureRecognizer.CommandProperty, _ => _.MyCommand);

该命令在视图模型中如下:

查看模型

public ICommand MyCommand
{
    get
    {
        return new Command((parameters) =>
        {               
            // Can I access imageTap element here?
        });
    }
}

有没有办法从它绑定的命令中访问imageTap元素?

2 个答案:

答案 0 :(得分:1)

是的,您可以使用命令参数。

您可以从我们的表格团队工程师那里找到这个答案/帖子。 https://stackoverflow.com/a/25914911/85606

imageTap.SetBinding<MyViewModel>(TapGestureRecognizer.CommandProperty, _ => _.MyCommand);
//Command parameter
imageTap.SetBinding<MyViewModel>(TapGestureRecognizer.CommandParameterProperty, _ => imageTap);

CommandParameterTapGestureRecognizer上的另一个可绑定属性,您可以在另一行上设置它。

答案 1 :(得分:1)

为了更彻底地解释一下,当您使用CommandParameter时,绑定的对象将作为Command的Action的参数传入。然后,您必须将参数强制转换为所需类型才能使用或修改它。

例如,如果您想从Command中获取对Image元素的引用,您可以像下面那样设置Control:

var clickableImage = new Image (...);
var imageTap = new TapGestureRecognizer();
clickableImage.GestureRecognizers.Add(imageTap);
imageTap.SetBinding<MyViewModel>(TapGestureRecognizer.CommandProperty, _ => _.MyCommand);
imageTap.SetBinding<MyViewModel>(TapGestureRecognizer.CommandParameterProperty, _ => clickableImage); // clickableImage will be passed to MyCommand when it is run

然后在你的MyViewModel类中,你可以这样设置你的命令:

public ICommand MyCommand
{
    get
    {
        return new Command((parameter) => // the bound parameter (the Image element in this case) is passed in as an object
        {               
            var clickableImage = (Image)parameter; // cast the parameter object to an Image.
            // Use the element for whatever you need
            ...
        });
    }
}