Xamarin.android TextView复合可拉伸MvvmCross装订

Xamarin.android TextView复合可拉伸MvvmCross装订,xamarin.android,mvvmcross,Xamarin.android,Mvvmcross,TextView具有一些DrawableXXX属性,如DrawableStart、DrawableEnd、DrawableTop等,以在TextView文本旁边显示一个DrawableXXX。是否可以使用MvvmCross绑定此属性?我尝试在绑定中使用local:MvxBind=“Drawablename‘check'”,但显示MvxBind错误失败: 无法为要检查的绑定DrawableName创建目标绑定 如果这个绑定没有在MvvmCross中实现,那么我自己怎么做呢?该方法仍然是添加自定义绑

TextView
具有一些
DrawableXXX
属性,如
DrawableStart
DrawableEnd
DrawableTop
等,以在
TextView
文本旁边显示一个
DrawableXXX
。是否可以使用MvvmCross绑定此属性?我尝试在绑定中使用
local:MvxBind=“Drawablename‘check'”
,但显示MvxBind错误失败:

无法为要检查的绑定DrawableName创建目标绑定


如果这个绑定没有在MvvmCross中实现,那么我自己怎么做呢?该方法仍然是添加自定义绑定的推荐方法吗?

目前没有任何用于添加复合可绘图项的MvvmCross-define目标绑定。但是,您可以轻松地添加自己的。如果您使用的是MvvmCross 5+,则可以利用新类型的自定义绑定类注意,下面的示例已将可绘制设置为放置在左侧,但是,您可以选择放置在任何方向(或多个方向)

然后在XML中可以使用


local:MvxBind=“CompoundDrawableName”

如果您支持API 17+,您还可以使用
SetCompoundDrawablesRelativeWithIntrinsicBounds
,它满足
开始
顶部
结束
底部
的要求。您可以申请添加此项吗?@Martijn00,我不知道如何将其推广到Mvx绑定,以便允许开发人员选择每个方向一个或多个图像。本质上,我们需要一种方法来拍摄1-4幅不同的图像,并将它们应用到4个不同的可能方向。我在上创建了一个问题以继续此转换。N+28用于自定义绑定的方法对于MvvmCross 4.x仍然有效。如果您使用的是MvvmCross 5.x,那么您可以使用一个类型化的
MvxAndroidTargetBinding
public class CompoundDrawablesDrawableNameBinding : MvxAndroidTargetBinding<TextView, string>
{
    public const string BindingIdentifier = "CompoundDrawableName";

    public CompoundDrawablesDrawableNameBinding(TextView target) : base(target)
    {
    }

    public override MvxBindingMode DefaultMode => MvxBindingMode.OneWay;

    protected override void SetValueImpl(TextView target, string value)
    {
        var resources = AndroidGlobals.ApplicationContext.Resources;
        var id = resources.GetIdentifier(value, "drawable", AndroidGlobals.ApplicationContext.PackageName);
        if (id == 0)
        {
            MvxBindingTrace.Trace(MvxTraceLevel.Warning,
                "Value '{0}' was not a known compound drawable name", value);
            return;
        }

        target.SetCompoundDrawablesWithIntrinsicBounds(
            left: id,
            top: 0,
            right: 0,
            bottom: 0);
    }
}
protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
{
    base.FillTargetFactories(registry);
    registry.RegisterCustomBindingFactory<TextView>(
        CompoundDrawablesDrawableNameBinding.BindingIdentifier,
        textView => new CompoundDrawablesDrawableNameBinding(textView));
}