DelayBind不绑定iOS上的MvxTableViewCell中的MvxCommands

时间:2016-04-13 13:44:12

标签: ios xamarin mvvmcross

我有ItemCell继承自MvxTableViewCell。以下简化:

构造

public ItemCell(IntPtr handle) : base(handle)
{
    CreateLayout();
    InitializeBindings();
}

CreateLayout()创建和约束其他元素:

  • UILabel _label
  • A UIButton _button

InitializeBindings

private void InitializeBindings()
{
    this.DelayBind(() =>
    {
        var set = this.CreateBindingSet<ItemCell, ItemViewModel>();

        set.Bind(_label).For(x => x.Text).SourceDescribed("'Label: ' + ItemNumber");
        set.Bind(_button).To(vm => vm.ItemCommand);

        set.Apply();
    });
}

ViewModel 包含以下属性和命令:

private string _itemNumber;
public string ItemNumber
{
    get { return _itemNumber; }
    set { SetProperty(ref _itemNumber, value); }
}

private IMvxCommand _itemCommand;
public IMvxCommand ItemCommand
{
    get
    {
        return _itemCommand?? (_itemCommand= new MvxCommand(() => {
            //Logic
        }));
    }
 }

TableView绑定到一个集合并重复单元格时,_label的文本会呈现正确的值(&#34;标签:{ItemNumber}&#34; ),但点击该按钮并未点击ItemCommand get。我也尝试将.For("TouchUpInside")添加到按钮的绑定中,但这并没有改变任何内容。

我很困惑为什么标签正确绑定,但按钮没有。

2 个答案:

答案 0 :(得分:4)

不幸的是,我没有足够的积分来添加评论,所以我将添加我的建议作为答案。

可能发生的事情是触摸事件是针对整个单元格处理的,因此事件不会传递给孩子们那个细胞。您的按钮可能正确绑定,但由于您的单元格中的按钮永远不会收到触摸事件,您绑定的命令永远不会被解雇

修改

您可以查看此链接,它似乎可以解决您的问题。 http://pandas.pydata.org/pandas-docs/stable/reshaping.html

答案 1 :(得分:0)

调试输出(Mvx.Trace())UIButton的界限。即使它被显示,它的&#34;界限&#34;可能是0.在这种情况下,不会发生任何交互,您必须修复布局(约束或框架)。