Xamarin.Forms 如何将 CommandParameter 设置为 ListView 项目本身
How to set the CommandParameter to the ListView item itself in Xamarin.Forms
我正在使用 C# 中定义的自定义 ViewCell 来填充 Xamarin.Forms 中的 ListView。 ViewCell 包含一个图像,充当按钮,单击时应该能够操作 ListView 的基础数据。
基本上我正在寻找等效于以下代码的代码:
<Image.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding Path=BindingContext.PlusClickedCommand, Source={x:Reference Name=ChallengesLV}}"
CommandParameter="{Binding}"/>
</Image.GestureRecognizers>
我试过:
plusButton.GestureRecognizers.Add(new TapGestureRecognizer() {
Command = bindingContext.AddProgressToChallengeCommand,
CommandParameter = new Binding(".")} });
但是当我尝试在我的视图模型中访问类型为 Challenge 的对象时,它给了我一个 NullReference 异常:
AddProgressToChallengeCommand = new Command( (sender) => doSomething((Challenge)sender) );
当我在调试模式下检查发件人对象时,它告诉我它是一个 Binding 类型的对象,每个 属性 null 除了 path="."
如何获取此绑定引用的项目?
感谢杰森:
命令需要像这样初始化,以访问参数:
AddProgressToChallengeCommand = new Command<Challenge>( (challenge) =>
doSomething(challenge);
对于识别器绑定,我需要将其更改为:
var recognizer = new TapGestureRecognizer() {Command = bindingContext.AddProgressToChallengeCommand};
recognizer.SetBinding(TapGestureRecognizer.CommandParameterProperty, ".");
plusButton.GestureRegognizers.Add(recognizer);
我正在使用 C# 中定义的自定义 ViewCell 来填充 Xamarin.Forms 中的 ListView。 ViewCell 包含一个图像,充当按钮,单击时应该能够操作 ListView 的基础数据。
基本上我正在寻找等效于以下代码的代码:
<Image.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding Path=BindingContext.PlusClickedCommand, Source={x:Reference Name=ChallengesLV}}"
CommandParameter="{Binding}"/>
</Image.GestureRecognizers>
我试过:
plusButton.GestureRecognizers.Add(new TapGestureRecognizer() {
Command = bindingContext.AddProgressToChallengeCommand,
CommandParameter = new Binding(".")} });
但是当我尝试在我的视图模型中访问类型为 Challenge 的对象时,它给了我一个 NullReference 异常:
AddProgressToChallengeCommand = new Command( (sender) => doSomething((Challenge)sender) );
当我在调试模式下检查发件人对象时,它告诉我它是一个 Binding 类型的对象,每个 属性 null 除了 path="."
如何获取此绑定引用的项目?
感谢杰森: 命令需要像这样初始化,以访问参数:
AddProgressToChallengeCommand = new Command<Challenge>( (challenge) =>
doSomething(challenge);
对于识别器绑定,我需要将其更改为:
var recognizer = new TapGestureRecognizer() {Command = bindingContext.AddProgressToChallengeCommand};
recognizer.SetBinding(TapGestureRecognizer.CommandParameterProperty, ".");
plusButton.GestureRegognizers.Add(recognizer);