【问题标题】:ImageButton not firing Command binding in Xamarin FormsImageButton 未触发 Xamarin 表单中的命令绑定
【发布时间】:2021-04-14 15:52:00
【问题描述】:

我有一个没有使用 VMMV 架构触发命令绑定命令的 ImageButton。首先,所有其他绑定都在视图中正常工作。

这里是按钮:

<ImageButton Command="{Binding SelectedItemCommand}" Source="{Binding Logo}" Grid.Row="0" Grid.Column="1" HeightRequest="150" WidthRequest="150" HorizontalOptions="CenterAndExpand" VerticalOptions="EndAndExpand"></ImageButton>

在 ViewModel 中:

public ICommand SelectedItemCommand => new Command(GetSelectedItem);

当我单击图像时,没有任何反应。我什至尝试绑定到 Pressed 参数,但是从我所读的所有内容中,只有 Command 参数应该在绑定场景中使用。在函数 GetSelectedItem 上放置断点永远不会到达。

我在这里做错了什么?

抱歉几天不见了。因此,即使他们真的应该点击不会触发命令,也没有任何关于建议的工作。无论如何,我现在设法使用这样的事件处理程序来触发它:

SelectedItemCommand = new Command<string>(param => OnItemSelected(param));

public void OnItemSelected(string img1_2)
{
  PressedEventHandler?.Invoke(this, EventArgs.Empty);
}

参数捕获命令参数,因此我知道单击问题的哪个图像“img1”“img2”来执行特定操作。所以我的函数现在接受一个发送者对象和空事件参数。我想改为传递 img1_2 值,但目前看来不可能。奇怪的是 sender 对象包含图像中的所有属性和值(就像我所有属性的数组),但我似乎无法理解它们。 尝试过这个:

string str = Item1Image.ToString(); // property in sender and viewmodel

但这会返回一个空值,而不是在发送者对象值中列出的值?

还有什么想法吗?

TIA! 瑞克...

【问题讨论】:

  • 您只能绑定到公共属性 - 您需要 get 才能使其成为属性
  • 谢谢杰森。所以你是说我的公开 ICommand 声明是错误的?我通过观看视频获得了此代码。我也在一个“已解决”的问题中看到了这一点,这几乎正是我想要做的。反正。所以是这样的: public ICommand SelectedItemCommand { get;放;} ?我将如何以这种方式触发我的函数?
  • 就像任何属性一样在构造函数中赋值
  • 你把你的ImageButton放在哪里了?该物业可能很好。
  • Shaw,如果我关注您的问题,则 imagebutton 在我的 xaml 页面中,并且我的绑定在 xaml 文件中被引用回我编写代码的视图模型。

标签: xamarin.forms data-binding viewmodel imagebutton


【解决方案1】:
public ICommand SelectedItemCommand {get; private set;}

...

public YourViewModel(){
   ...
   SelectedItemCommand = new Command(GetSelectedItem);
   ...
}
...

或者

public ICommand SelectedItemCommand{
   get
   {
      return new Command(() => {
           //Do something
      });
   }
}

【讨论】:

  • 感谢 IInam,但是当单击一个项目时,没有人从 Command 参数中触发?您建议的第一个选项仅在页面初始加载时触发。
  • 将视图模型构造函数中的代码更改为 SelectedItemCommand = new Command(GetSelectedItem);
  • 我还能够弄清楚如何从发件人对象中获取属性。我需要像 QItems qitms = (QItems)sender; 一样再次转换为我的模型;然后像这样使用:qitms.Item1Image...等。
  • @Rick 竖起大拇指
猜你喜欢
  • 2020-10-30
  • 1970-01-01
  • 2017-04-16
  • 2021-02-11
  • 2019-12-13
  • 2019-05-24
  • 2014-09-07
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多