在Xamarin:app的输入字段中将输入限制为最大值崩溃

时间:2017-07-12 09:14:23

标签: c# xamarin keyboard-events xamarin.forms.entry

我试图将值限制为Entry字段到某个值。我尝试了以下内容。 当用户输入任何大于最大限制的数字时,字段设置为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()并且不允许再次输入输入。

2 个答案:

答案 0 :(得分:0)

也许尝试这样的事情,只需确保在调用'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();
                }
            }
        }

答案 1 :(得分:-1)

嗯,你是绑定&#34; getHeight&#34;,不是&#34; GetHeight&#34;到了视野。

如果要更新该绑定的视图,则必须更改OnPropertyChanged()调用以更新正确的绑定。