无法在MvvmCross Android项目中找到ValueCombiner

时间:2014-12-22 17:14:37

标签: data-binding mono xamarin xamarin.android mvvmcross

我试图将西藏绑定与值组合器一起使用,我无法在自定义实现中使用它,我不断收到此错误:

12-22 16:59:27.617 I/MvxBind (12700): 3.77 Failed to find combiner or converter for Counting

所以我复制粘贴了Wiki

中的示例
public class CountingValueCombiner
: MvxValueCombiner
{
    public CountingValueCombiner()
    {
        Android.Util.Log.Error("!!!", "In combiner");
    }
    public override Type SourceType(IEnumerable<IMvxSourceStep> steps)
    {
        return typeof(int);
    }

    public override System.Boolean TryGetValue(IEnumerable<IMvxSourceStep> steps, out Object value)
    {
        var count = 0;
        foreach (var input in steps)
        {
            object innerResult = input;


            if (innerResult != null)
                count++;
        }

        value = count;
        return true;
    }
}

在xml中:

<TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="#ff00ff"
        android:textSize="30dp"
        local:MvxBind="Text Counting(FirstName, Title)"/>

其中FirstName和Title是ViewModel的字符串属性。 这个类是在droid项目上,但无论如何,定位器似乎都没有找到组合器。 查看源代码后,我发现注册码位于MvxCoreBindingBuilder,并在protected virtual void FillValueCombiners(IMvxValueCombinerRegistry registry)

上调用

我无法找到如何手动注册,因为我收到了绑定错误: 12-22 16:59:27.617 I/MvxBind (12700): 3.77 Failed to find combiner or converter for Counting

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:2)

由于值组合器的使用频率低于值转换器,因此默认情况下mvx不会在应用程序集中搜索它们。

好消息是,您自己搜索它们或者手动注册它们相对容易。要执行此操作,请在设置中查找值转换器回调 - 在https://github.com/MvvmCross/MvvmCross/blob/3.2/Cirrious/Cirrious.MvvmCross.Droid/Platform/MvxAndroidSetup.cs中 - 您可以覆盖代码中的回调块,为值组合器注册表添加自己的挂钩。

对不起,这个答案有点模糊 - 在3英寸触摸屏上很难说话。可以在一周内添加更多细节......