2013-03-04 53 views
3

MvvmCross用于创建从UIBarButtonItemMvxCommand的绑定的正确方法是什么?绑定到MvvmCross中的UIBarButtonItem事件

这并没有为我工作 - >

public override void ViewDidLoad() 
{ 
    base.ViewDidLoad(); 
    this.AddBindings (new Dictionary<object, string>(){ 
     {MyButton, "{'Clicked':{'Path':'MyCommand'}}"} 
    }); 
} 

我也不在控制台收到任何错误。我可以通过避免绑定来解决,但是你知道,如果所有绑定都是最好的。

回答

11

假设在调用AddBindings之前初始化了bar按钮 - MyButton,那么我认为你的代码应该可以工作。

我修改了代码中WelcomeView会议样品中这下面,它似乎工作...

 var s = new UIBarButtonItem() 
     { 
      Title = "Click me" 
     }; 

     NavigationItem.SetRightBarButtonItem(s, false); 

     this.AddBindings(new Dictionary<object, string>() 
      { 
       { Button1, "TouchUpInside ShowSponsorsCommand" },    
       { Button2, "TouchUpInside ShowExhibitorsCommand" },    
       { Button3, "TouchUpInside ShowMapCommand" },     
       { Button4, "TouchUpInside ShowAboutCommand" }, 
      { s, "Clicked ShowMapCommand" }, 
      }); 

     //NavigationItem.SetRightBarButtonItem(new UIBarButtonItem("Tweet", UIBarButtonItemStyle.Bordered, (sender, e) => ViewModel.DoShareGeneral()), false); 

很抱歉,如果这个“它为我的回答不能在你的机器上有所帮助:/

为确保此功能在发布模式下可用,您可能需要在某处添加一些UIBarButtonItem.Clicked代码。

如果您想从绑定中找到更多的跟踪,那么您可以设置一个诊断跟踪级别(但这可能会变得非常冗长)。

这可能是值得检查的,如果你的MyCommand被调用,但某种程度上失败 - 这可能会发生的东西,如电子邮件,PhoneCalls,推文等,这些并不总是在模拟器上工作。

+0

谢谢@Stuart。它也适用于我。我的'MvxCommand'的'canExecute'部分返回false:/ – 2013-03-04 14:11:15

+0

Mvx现在不做的一件事是处理canExecute以在任何控件上启用绑定 - 这可以绕过使用单独的启用/禁用属性,但不是'完美。 – Stuart 2013-03-04 15:15:41