将 Xamarin 中 Entry 字段中的输入限制为最大值:应用程序崩溃
Restricting the input to maximum value in Entry field in Xamarin: app Crashes
我试图将输入字段中的值限制为特定值。我尝试了以下。
当用户输入任何大于最大限制的数字时,字段设置为 0。
但是,当用户按下退格键或尝试输入任何新数字时,应用程序会崩溃。
查看模型:
private int? getHeight = null;
public int? GetHeight
{
get { return getHeight; }
set
{
if (!getHeight.HasValue || (!getHeight.Equals(value) && value.Value <= 250))
{
getHeight = value;
}
else
{
getHeight = 0;
}
OnPropertyChanged();
}
}
查看:
heightEntry = new Entry
{
Keyboard = Keyboard.Numeric
};
heightEntry.SetBinding(Entry.TextProperty, nameof(MyViewModel.GetHeight), converter: new NullableIntConverter());
heightEntry.SetBinding(Entry.IsEnabledProperty, nameof(MyViewModel.UiElementsEnabled));
optionsGrid.Children.Add(heightEntry, 1, 1);
应用程序由于 OnPropertyChanged() 而崩溃,即当字段设置为零时,OnPropertyChanged() 被触发并且不允许再次输入。
好吧,您绑定的是 "getHeight",而不是 "GetHeight" 视图。
如果您想更新该绑定的视图,您必须更改 OnPropertyChanged() 调用以更新正确的绑定。
也许可以尝试这样的操作,只要确保在调用 'onpropertychange' 之前该值不为空即可。
private int? getHeight = null;
public int? GetHeight
{
get { return getHeight; }
set
{
if (!getHeight.HasValue || (!getHeight.Equals(value) && value.Value <= 250))
{
getHeight = value;
}
else
{
getHeight = 0;
value = 0; //override the value
}
// validate against our value for the property change.
if (value.HasValue && value != null)
{
OnPropertyChanged();
}
}
}
我试图将输入字段中的值限制为特定值。我尝试了以下。 当用户输入任何大于最大限制的数字时,字段设置为 0。
但是,当用户按下退格键或尝试输入任何新数字时,应用程序会崩溃。
查看模型:
private int? getHeight = null;
public int? GetHeight
{
get { return getHeight; }
set
{
if (!getHeight.HasValue || (!getHeight.Equals(value) && value.Value <= 250))
{
getHeight = value;
}
else
{
getHeight = 0;
}
OnPropertyChanged();
}
}
查看:
heightEntry = new Entry
{
Keyboard = Keyboard.Numeric
};
heightEntry.SetBinding(Entry.TextProperty, nameof(MyViewModel.GetHeight), converter: new NullableIntConverter());
heightEntry.SetBinding(Entry.IsEnabledProperty, nameof(MyViewModel.UiElementsEnabled));
optionsGrid.Children.Add(heightEntry, 1, 1);
应用程序由于 OnPropertyChanged() 而崩溃,即当字段设置为零时,OnPropertyChanged() 被触发并且不允许再次输入。
好吧,您绑定的是 "getHeight",而不是 "GetHeight" 视图。
如果您想更新该绑定的视图,您必须更改 OnPropertyChanged() 调用以更新正确的绑定。
也许可以尝试这样的操作,只要确保在调用 'onpropertychange' 之前该值不为空即可。
private int? getHeight = null;
public int? GetHeight
{
get { return getHeight; }
set
{
if (!getHeight.HasValue || (!getHeight.Equals(value) && value.Value <= 250))
{
getHeight = value;
}
else
{
getHeight = 0;
value = 0; //override the value
}
// validate against our value for the property change.
if (value.HasValue && value != null)
{
OnPropertyChanged();
}
}
}