我有一个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?当我省略转换器时,它会用整个日期和时间填充它,我只想要日期。有人请帮忙。
吉姆
答案 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