每次键入键时,MvvmCross IMvxValueConverter 都会触发
MvvmCross IMvxValueConverter fires every time you type a key
我有一个 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?当我省略转换器时,它会用整个日期和时间填充它,而我只想要日期。有人请帮助。
吉姆
要解决这个问题,您可以为 FocusText
添加一个绑定,它只会在失去焦点时更新。最近有关于在 MvvmCross 中引入 FocusText
的讨论 - 基于 MvvmCross: change update source trigger property of binding on MonoDroid - 但我不相信它曾经通过 Pull Request。
然而,实际上,在移动设备中 UI 通过自由文本输入日期通常是不受欢迎的 - 最好使用专门的日期控件 - 例如喜欢 https://github.com/MvvmCross/MvvmCross-Tutorials/blob/master/ApiExamples/ApiExamples.Droid/Resources/Layout/Test_Date.axml#L12
我有一个 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?当我省略转换器时,它会用整个日期和时间填充它,而我只想要日期。有人请帮助。
吉姆
要解决这个问题,您可以为 FocusText
添加一个绑定,它只会在失去焦点时更新。最近有关于在 MvvmCross 中引入 FocusText
的讨论 - 基于 MvvmCross: change update source trigger property of binding on MonoDroid - 但我不相信它曾经通过 Pull Request。
然而,实际上,在移动设备中 UI 通过自由文本输入日期通常是不受欢迎的 - 最好使用专门的日期控件 - 例如喜欢 https://github.com/MvvmCross/MvvmCross-Tutorials/blob/master/ApiExamples/ApiExamples.Droid/Resources/Layout/Test_Date.axml#L12