将 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();
                }
            }
        }