UIBarButtonItem GetEvents在真实设备上返回0项

时间:2017-08-24 12:33:30

标签: xamarin.ios mvvm-light system.reflection

我在Xamarin.iOS项目中使用MVVM Light,我使用调用Type.GetEvent()的SetCommand将命令绑定到按钮。当我在模拟器上执行应用程序时一切正常,但是当我在真实设备(iOS 10.3.3)上执行应用程序时,SetCommand方法失败并显示消息:“未找到事件:单击” 参数名称:eventName“。

这只发生在UIBarButtonItem上,使用SetCommand在两个环境中将UIButtons正确绑定到“TouchUpInside”。

我测试了_uiBarButton.GetType()。GetEvents()并在真实设备上返回一个空数组。

这里可以发生什么?有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

好吧,在创建自定义扩展方法后,作为一种解决方法:

public static void SetBarButtonCommand(this UIBarButtonItem button, ICommand command)
{
  SetBarButtonCommand(button, string.Empty, command);
}

public static void SetBarButtonCommand(this UIBarButtonItem button, string eventName, ICommand command)
{
  button.Clicked += (s, args) =>
  {
    if (command.CanExecute(null))
    {
      command.Execute(null);
    }
  };

  button.Enabled = command.CanExecute(null);
  command.CanExecuteChanged += (s, args) =>
  {
    button.Enabled = command.CanExecute(null);
  };
}

问题已经消失!!这很奇怪,因为我在尝试之前已经多次清理并重新编译了该项目,但现在我再次使用默认的MVVM Light SetCommand扩展方法,所有这些都在真实设备上工作正常,非常奇怪......

被修改

我找到了一篇解释这个问题的好文章:

Solving the event not found