Xamarin.ios MvvmCross Touch项目中的自定义可绑定控件

Xamarin.ios MvvmCross Touch项目中的自定义可绑定控件,xamarin.ios,mvvmcross,Xamarin.ios,Mvvmcross,我有一个MvxBaseBindableCollectionViewCell,它加载一个包含自定义按钮的xib。我希望能够将ViewModel绑定到这个自定义按钮。这可能吗 我正在尝试实现类似于MyButton.ViewModel=ViewModel.ChildViewModel的功能,并将ViewModel.ChildViewModel.Name显示为按钮标题。如果您想自定义绑定单元格,那么在 如果您想在该视图中创建一个完全可绑定的UIButton,那么您可以使用一些继承,如: [Registe

我有一个MvxBaseBindableCollectionViewCell,它加载一个包含自定义按钮的xib。我希望能够将ViewModel绑定到这个自定义按钮。这可能吗


我正在尝试实现类似于
MyButton.ViewModel=ViewModel.ChildViewModel
的功能,并将ViewModel.ChildViewModel.Name显示为按钮标题。

如果您想自定义绑定单元格,那么在

如果您想在该视图中创建一个完全可绑定的UIButton,那么您可以使用一些继承,如:

[Register("MyButton")]
public class MyButton
    : UIButton
      , IMvxServiceConsumer
{
    private IList<IMvxUpdateableBinding> _bindings;

    private const string BindingText = "SpecialTitle Customer.Name";

    public MyButton()
    {
    }

    public MyButton(IntPtr handle)
        : base(handle)
    {
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            foreach (var binding in _bindings)
            {
                binding.Dispose();
            }
            _bindings.Clear();
        }
        base.Dispose(disposing);
    }

    private object _dc;

    public object DataContext
    {
        get { return _dc; }
        set
        {
            _dc = value;
            if (_bindings == null)
            {
                var binder = this.GetService<IMvxBinder>();
                _bindings = binder.Bind(_dc, this, BindingText).ToList();
            }
            else
            {
                foreach (var binding in _bindings)
                {
                    binding.DataContext = _dc;
                }
            }
        }
    }

    public string SpecialTitle
    {
        get { return this.GetTitle(UIControlState.Normal); }
        set { this.SetTitle(value, UIControlState.Normal); }
    }
}
[注册(“我的按钮”)]
公共类MyButton
:ui按钮
,IMvxServiceConsumer
{
私有IList_绑定;
private const string BindingText=“SpecialTitle Customer.Name”;
公共MyButton()
{
}
公共MyButton(IntPtr句柄)
:底座(手柄)
{
}
受保护的覆盖无效处置(布尔处置)
{
如果(处置)
{
foreach(变量绑定在_绑定中)
{
binding.Dispose();
}
_bindings.Clear();
}
基地。处置(处置);
}
私有对象dc;
公共对象数据上下文
{
获取{return\u dc;}
设置
{
_dc=数值;
if(_bindings==null)
{
var binder=this.GetService();
_bindings=binder.Bind(_dc,this,BindingText).ToList();
}
其他的
{
foreach(变量绑定在_绑定中)
{
binding.DataContext=\u dc;
}
}
}
}
公共字符串专用
{
获取{返回this.GetTitle(UIControlState.Normal);}
设置{this.SetTitle(值,UIControlState.Normal);}
}
}

旁白>MvvmCross v3“Hot Tuna”将包含一些帮助程序类,以简化此操作