【发布时间】:2016-08-29 01:11:55
【问题描述】:
我在 Xamarin Forms ContentPage 上有一个条目,我已绑定到 ViewModel 属性 QtyIn,它是一个 Int32:
private int _qtyIn;
public int QtyIn
{
get { return _qtyIn; }
set
{
if (_qtyIn != value)
{
_qtyIn = value;
RaisePropertyChanged("QtyIn");
}
}
}
这是我的 XAML:
<Entry Text="{Binding Path=Source.QtyIn, Mode=TwoWay, Converter={StaticResource intToStringConverter}}" />
还有我的 IValueConverter:
public class IntToStringConverter : IValueConverter
{
// from Int32 to String
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value.ToString();
}
// String to Int
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
int parsedInt = 0;
if (int.TryParse(value.ToString(), out parsedInt))
{
return parsedInt;
}
return value;
}
}
问题是当我尝试输入一个负数(以“-”减号开始时,绑定失败,因为它无法将“-”转换为 Int32。这是我在 Android 设备上运行此应用时在单声道输出中看到的错误:
05-03 15:19:27.923 I/mono-stdout(19384): Binding: - can not be converted to type 'System.Int32'
有谁知道如何将整数绑定到允许负数的 Text 属性?我在 Xamarin 的网站或论坛上找不到任何相关文档。
在 WPF 中,我会使用 UpdateSourceTrigger=LostFocus 属性仅在输入整数后进行转换,但 Xamarin Forms 没有此属性可用。
【问题讨论】:
-
所以你的要求是:如果
Text无效(不能转换为int),QtyIn应该设置为0,或者? -
我的要求是,如果我尝试输入数字 -123,它应该允许我将它输入到条目中。当我键入一个 - 时,它不是一个有效的整数,因此文本更改为 0。该属性应该仅在条目失去焦点时更改,但是 Xamarin Forms 没有 UpdateSourceTrigger=LostFocus 属性。
-
你在哪个平台上测试?在我的测试用例(android,绑定 without 转换器)中,它只会产生警告,并且只会在可以转换的情况下更新属性。
-
我正在 Android (API 19) 上进行测试。我删除了我的 IValueConverter,每当我按屏幕键盘上的“-”键时都会看到这个:05-04 10:12:42.683 I/mono-stdout(21775): Binding: - can't be convert to type 'System. Int32'
-
是的,这只是警告。如果您进一步输入,该属性会正确更新。
标签: xaml mvvm data-binding xamarin xamarin.forms