如何将两个输入传递给xamarin android中的值转换器

时间:2017-08-06 07:49:00

标签: c# xamarin xamarin.android mvvmcross

发生了什么

  • 我将一个布尔值传递给转换器并执行一些操作 行动(改变抽屉)。

我要做的是

  • 如何将两个布尔值传递给转换器并执行一些操作 动作。
  • 这可能吗?
  • 如果这不是通过将两个输入传递给单个的正确方法 值转换器,那么如何解决这个问题

CONVERTER:CruiseShipIndicatorValueConverter.cs

public class CruiseShipIndicatorValueConverter : MvxValueConverter<bool, int>
    {
        protected override int Convert(bool value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value)
            {
                return Resource.Drawable.up_arrow;
            }
            else
            {
                return Resource.Drawable.down_arrow;
            }
        }


        protected override bool ConvertBack(int value, Type targetType, object parameter, CultureInfo culture)
        {
            return base.ConvertBack(value, targetType, parameter, culture);
        }

    }

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="35dp"
    android:gravity="center"
    android:layout_gravity="center"
    android:padding="2dp">
    <MvxImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="2dp"
        android:gravity="center"
        android:layout_gravity="center"
        local:MvxBind="DrawableId QuesSeriesIndicator(questionState)" />
</LinearLayout>

2 个答案:

答案 0 :(得分:1)

非常简单。这可以通过单值转换器轻松完成。 我们可以通过现有的转换器定义来实现这一目标,而不是使用元组或任何其他通用数据类型。

例如:

public class CruiseShipIndicatorValueConverter : MvxValueConverter<bool, int>
{

    protected override int Convert(bool value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value)
        {
            return Resource.Drawable.up_arrow;
        }
        else
        {
            return Resource.Drawable.down_arrow;
        }

        if (parameter is bool)
        {
            bool value2 = (bool)parameter;
            // Here this value2 is the second boolean value.
        }
    }

    protected override bool ConvertBack(int value, Type targetType, object parameter, CultureInfo culture)
    {
        return base.ConvertBack(value, targetType, parameter, culture);
    }

}

其中MvxValueConverter,bool(questionState1)是&#34;值&#34;在Convert和int是Convert中的返回类型。对于第二个bool值(questionState2),在&#34;参数&#34;中获取作为类型对象。

对于绑定,我们必须发送

local:MvxBind="DrawableId QuesSeriesIndicator(questionState1, questionState2)" 

答案 1 :(得分:0)

您可以尝试将两个布尔值封装到类中或使用元组。

您的示例类实现将是这样的。

public class CruiseShipIndicatorValueConverter : MvxValueConverter<Tuple<bool, bool>, int>

详细了解元组here