我有一个视图,其中的图像具有绑定到命令的点击手势:
查看:
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元素?
答案 0 :(得分:1)
是的,您可以使用命令参数。
您可以从我们的表格团队工程师那里找到这个答案/帖子。 https://stackoverflow.com/a/25914911/85606
imageTap.SetBinding<MyViewModel>(TapGestureRecognizer.CommandProperty, _ => _.MyCommand);
//Command parameter
imageTap.SetBinding<MyViewModel>(TapGestureRecognizer.CommandParameterProperty, _ => imageTap);
CommandParameter
是TapGestureRecognizer
上的另一个可绑定属性,您可以在另一行上设置它。
答案 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
...
});
}
}