如何在与mvvmcross绑定时指定将使用哪个属性作为默认属性?

时间:2013-07-24 09:09:41

标签: ios xamarin.ios xamarin mvvmcross

我有自己想要绑定的对象/视图,我知道我可以执行以下操作。

var set = this.CreateBindingSet<MyView,MyViewModel>();
set.Bind( MyOwnObject ).For( o => o.MyDefaultProperty ).To( o => o.PropertyOnViewModel);
set.Apply();

这一切都很棒..

我的问题是如何摆脱For()位。

当我绑定到像'label'这样的内置视图时,我不必使用For。

如何设置我自己的默认属性?

1 个答案:

答案 0 :(得分:5)

默认属性列表是在BindingBuilder步骤中设置的 - 在Setup

期间在InitializeLastStep()中调用

该列表由实现IMvxBindingNameRegistry

的单例对象维护
public interface IMvxBindingNameRegistry
{
    void AddOrOverwrite(Type type, string name);
    void AddOrOverwrite<T>(Expression<Func<T, object>> nameExpression);
}

要将您自己的属性添加到此列表,您可以获得对此实现的引用。两种简单的方法是:

在设置中,您可以覆盖FillBindingNames

    protected virtual void FillBindingNames(IMvxBindingNameRegistry registry)
    {
        base.FillBindingNames(registry);
        registry.AddOrOverwrite(typeof(MyControl), "MyDefaultProperty");
    }

或在任何代码中(最好在UI或设置线程上运行),您可以在IoC容器中注册为:

    Mvx.CallbackWhenRegistered<IMvxBindingNameRegistry>(registry => 
        {
            registry.AddOrOverwrite(typeof(MyControl), "MyDefaultProperty");
        });