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

Mat*_*ers 2 xamarin.ios ios mvvmcross xamarin

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

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

一切都很好..

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

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

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

Stu*_*art 5

默认属性列表是在BindingBuilder步骤期间设置的- 在此Setup期间调用InitializeLastStep()

该列表由实现的单例对象维护 IMvxBindingNameRegistry

public interface IMvxBindingNameRegistry
{
    void AddOrOverwrite(Type type, string name);
    void AddOrOverwrite<T>(Expression<Func<T, object>> nameExpression);
}
Run Code Online (Sandbox Code Playgroud)

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

在设置中,您可以覆盖FillBindingNames:

    protected virtual void FillBindingNames(IMvxBindingNameRegistry registry)
    {
        base.FillBindingNames(registry);
        registry.AddOrOverwrite(typeof(MyControl), "MyDefaultProperty");
    }
Run Code Online (Sandbox Code Playgroud)

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

    Mvx.CallbackWhenRegistered<IMvxBindingNameRegistry>(registry => 
        {
            registry.AddOrOverwrite(typeof(MyControl), "MyDefaultProperty");
        });
Run Code Online (Sandbox Code Playgroud)