每次键入密钥时都会触发MvvmCross IMvxValueConverter

时间:2015-03-05 02:34:38

标签: c# android xamarin mvvmcross

我有一个MvvmCross应用程序,我正在使用日期值转换器,如下所示:

public class DateToStringConverter : IMvxValueConverter
{

    public object Convert(object value, Type targetType,
        object parameter, CultureInfo language)
    {
        if ((value != null) && (value.GetType() == typeof(DateTime)))
        {
            DateTime tmp = (DateTime)value;
            return tmp.ToString("MM/dd/yyyy");
        }
        return "";
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo language)
    {
        DateTime dt;
        if (DateTime.TryParse(value.ToString(), out dt))
            return dt;
        return null;
    }

}

我将它绑定到EditText,如下所示:

                    <EditText
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:inputType="date"
                        android:id="@+id/txtinventorydate"
                        style="@style/InputEditText"
                        local:MvxBind="Text ShipmentInventory.InventoryDate, Mode=TwoWay, Converter=DateToStringConverter" />

当它从数据库加载值时,它看起来很好,但每次我键入一个字符时,它都会触发转换。它永远不会触发ConvertBack。如果您正在键入日期,那么在完成之前似乎不希望这样做,因为半输入日期不是有效日期。任何人都有任何想法,为什么它可能这样做?有没有更好的方法将日期字段绑定到EditText?当我省略转换器时,它会用整个日期和时间填充它,我只想要日期。有人请帮忙。

吉姆

1 个答案:

答案 0 :(得分:1)

要解决此问题,您可以为FocusText添加一个绑定,该绑定只会在失去焦点时更新。最近有人讨论过在{MvvmCross中引入FocusText - 基于MvvmCross: change update source trigger property of binding on MonoDroid - 但我不认为它曾经通过了一个Pull Request。

然而,实际上,在移动用户界面中,通过自由文本输入日期通常是不受欢迎的 - 更好地使用专门的日期控制 - 例如比如https://github.com/MvvmCross/MvvmCross-Tutorials/blob/master/ApiExamples/ApiExamples.Droid/Resources/Layout/Test_Date.axml#L12