Xamarin.android 如何绑定到视图';在MvvmCross中的布局重量?

Xamarin.android 如何绑定到视图';在MvvmCross中的布局重量?,xamarin.android,xamarin,mvvmcross,Xamarin.android,Xamarin,Mvvmcross,绑定视图(或任何其他Android控件)权重的最简单方法是什么?由于此属性没有setter,我尝试了自定义绑定,但id似乎不起作用: public class ViewWeightCustomBinding : MvxAndroidTargetBinding { public ViewWeightCustomBinding(object target) : base(target) { } public override Type TargetType

绑定视图(或任何其他Android控件)权重的最简单方法是什么?由于此属性没有setter,我尝试了自定义绑定,但id似乎不起作用:

public class ViewWeightCustomBinding : MvxAndroidTargetBinding
{
    public ViewWeightCustomBinding(object target) : base(target)
    {
    }

    public override Type TargetType
    {
        get { return typeof (int); }
    }

    protected override void SetValueImpl(object target, object value)
    {
        var realTarget = target as View;
        if(target == null)
            return;

        ViewGroup.LayoutParams layoutParameters = realTarget.LayoutParameters;
        realTarget.LayoutParameters = new LinearLayout.LayoutParams(layoutParameters.Width, layoutParameters.Height,
                                                                  (int) value);
    }
}
在安装程序中注册:

protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
{
    registry.RegisterFactory(new MvxSimplePropertyInfoTargetBindingFactory(typeof(ViewWeightCustomBinding), typeof(View), "ViewWeight"));
    base.FillTargetFactories(registry);
}
和.axml

 <View
        android:layout_width="0dp"
        android:layout_height="3dp"
        android:background="@color/green_holo"
        local:MvxBind="ViewWeight Id" />

我可以在调试窗口中看到警告:

[0:] MvxBind:警告:5.20无法为Id的绑定ViewWeight创建目标绑定 [0:]MvxBind:警告:5.20无法为Id的绑定ViewWeight创建目标绑定 01-31 10:54:57.247 I/mono标准输出(3795):MvxBind:警告:5.20无法为绑定Id的ViewWeight创建目标绑定


MvxSimplePropertyInfoTargetBindingFactory
只能用于真正的C#属性

对于虚构的“伪”属性,您需要使用自定义绑定注册,如n=28教程中所示-

    protected override void FillTargetFactories(Cirrious.MvvmCross.Binding.Bindings.Target.Construction.IMvxTargetBindingFactoryRegistry registry)
    {
        registry.RegisterCustomBindingFactory<BinaryEdit>(
                        "N28", 
                        binary => new BinaryEditFooTargetBinding(binary) );
        base.FillTargetFactories(registry);
    }
protected override void fillTargetFactorys(cirries.MvvmCross.Binding.Bindings.Target.Construction.IMvxTargetBindingFactoryRegistry注册表)
{
registry.RegisterCustomBindingFactory(
“N28”,
binary=>newbinaryeditfootargetbinding(binary));
base.FillTargetFactorys(注册表);
}

据我所知,
layout\u weight
可以使用如下代码编程设置:-因此您可以构建自定义绑定来支持此功能。但是,我不知道在布局已经显示之后,是否可以轻松地动态更改权重值。在布局显示之后可以更改权重,我在java android中进行了测试,结果还可以。我在自定义绑定中使用了完全相同的代码,但它不起作用,看起来绑定本身有问题。