2013-03-04 2 views
3

Как правильно с MvvmCross создать привязку с UIBarButtonItem до MvxCommand?Привязать к событиям UIBarButtonItem в MvvmCross

Это не работает для меня ->

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

Я не получаю сообщение об ошибке в консоли. Я могу обойтись, избегая привязок, но вы знаете, это выглядело бы лучше всего, если бы все были связаны.

ответ

11

Предполагая, что кнопка бара - MyButton - инициализирована до вызова AddBindings, тогда я думаю, что ваш код должен работать.

Я изменил код в 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); 

К сожалению, если это «работает для меня» ответ не поможет на вашей машине:/

Чтобы гарантировать, что это работает в режиме Release, вам может потребоваться добавить код UIBarButtonItem.Clicked.

Если вы хотите больше трассировки из привязок, тогда вы можете установить уровень диагностической трассировки (но это может быть довольно многословным).

Возможно, стоит проверить, вызван ли ваш MyCommand, но как-то не удается - это особенно может случиться для таких вещей, как электронная почта, телефонные звонки, твиты и т. Д., Которые не всегда работают на симуляторе.

+0

Спасибо @Stuart. это работает и для меня. Часть 'canExecute' моего' MvxCommand' возвращала false:/ –

+0

Одна вещь, которую Mvx не делает прямо сейчас, - это обработать canExecute для включения привязки на любом элементе управления - это можно обойти, используя отдельные свойства с включенными/отключенными свойствами, но isn ' t совершенный. – Stuart

Смежные вопросы