2016-12-28 13 views
1

Я использую MVVMCross для моего проекта Xamarin iOS. Я использую кнопку внутри ячейки. Я хочу подключить его к viewModel через команду, но по какой-то причине я не могу успешно их связать.Xamarin iOS - MVVMCross: невозможно подключить кнопку в пользовательской ячейке с командой в ViewModel

Может кто-нибудь, пожалуйста, посмотрите и сообщите мне, где я делаю неправильно, или какие обновления я должен внести в свой код.

Вид:

public partial class MyCell : MvxCollectionViewCell 
{ 
     public PostImageCell(IntPtr handle) : base(handle) 
     { 
      this.DelayBind(() => 
      { 
        var bSet = this.CreateBindingSet<MyCell, SomeViewModel>(); 
        bSet.Bind(Btn).To(vm => vm.EditPhotoCommand); 
        bSet.Apply(); 
      }); 
     } 
} 

ViewModel:

public class SomeViewModel : BaseCoreViewModel 
{ 
     public SomeViewModel() 
     { 
     editPhotoCommand = new BaseMvxCommand(DoShow); 
     } 

     public ICommand EditPhotoCommand { get { return editPhotoCommand; } } 

     private void DoShow() 
     { 
      // 
     } 
} 

Я сохранил некоторые контрольные точки и понял, что, когда MyCell конструктор вызывается код внутри this.DelayBind() не является хитом, поэтому я попытался удалить this.DelayBind, но все равно бесполезно. Всякий раз, когда я нажимаю на кнопку внутри клетки, его не связываясь с командой внутри ViewModel

+0

Находит ли ваш 'Btn' контроль на' UIButton'? Если не какой тип? – Plac3Hold3r

+0

@ Plac3Hold3r Да, его вывод из UIButton – TheDeveloper

+0

Ажар Али вы могли бы предоставить образец, который повторяет эту проблему? – Plac3Hold3r

ответ

0

Вероятно, что-то делать, как показано ниже в вашей ViewModel, а затем связать в bSet.Bind (BTN) .то (Vm => vm.ClickCommand); Я правильно настроил вашу кнопку на представлении. У меня есть образец, работающий прямо сейчас с кнопкой на tableviewcell.

private MvxCommand _clickCommand; 
    public ICommand ClickCommand 
    { 
     get 
     { 
      _clickCommand = _clickCommand ?? new MvxCommand(Hit); 
      return _clickCommand; 
     } 
    } 

    private void Hit() 
    { 
     System.Diagnostics.Debug.WriteLine("Tapped Click Me"); 
     //System. .WriteLine ("Tapped Click Me"); 
    } 
+0

Я пробовал, но он не работал – TheDeveloper