代码之家  ›  专栏  ›  技术社区  ›  Welsh

将输入限制为Xamarin中输入字段的最大值:应用程序崩溃

  •  0
  • Welsh  · 技术社区  · 9 年前

    当用户输入任何大于最大限制的数字时,字段设置为0。

    然而,当用户按backspace或试图输入任何新数字时,应用程序崩溃。

    视图模型:

    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 回复  |  直到 8 年前
        1
  •  1
  •   JoeTomks    9 年前

    也许可以尝试这样的方法,只要在调用“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();
                    }
                }
            }
    
        2
  •  -1
  •   FDguez    9 年前

    好的,您将“getHeight”绑定到视图,而不是“getHeight”。