You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义数值输入控件绑定异常:Max更新时IsEnabled/Opacity未同步

自定义步进数值输入控件Max属性更新时绑定失效问题

我开发了一款带步进器的自定义数值输入控件,除一处属性绑定问题外,其余功能均正常。控件增减按钮的IsEnabled和Opacity属性已完成绑定,逻辑为:当Value属性大于Min或小于Max时,对应按钮可点击。

存在的问题:仅当**Max属性单独更新(而非Value属性更新)**时,按钮的绑定逻辑无法按预期生效。该控件部分场景下需作为集合对象的输入组件使用。

问题核心:按钮的绑定仅监听了Value属性的变更,但绑定逻辑中同时依赖Max属性,导致Max单独更新时绑定不会触发更新。

以下是增量按钮相关的代码及属性:

public double? Value { get { return (double?)GetValue(ValueProperty); } set { SetValue(ValueProperty, value); } }
public static readonly BindableProperty ValueProperty = BindableProperty.Create(nameof(Value), typeof(double?), typeof(Nu), null);

public double? Max { get { return (double?)GetValue(MaxProperty); } set { SetValue(MaxProperty, value); } }
public static readonly BindableProperty MaxProperty = BindableProperty.Create(nameof(Max), typeof(double?), typeof(NumericEntry), null);

public event EventHandler Tapped;

new PancakeView (true, 0) // This is tappable, it increments 'Value' by one
{ 
   Content = new FontAwesome
   {
      Text = "\u002b", // Plus Symbol
   }.Bind(OpacityProperty, nameof(Value), source: this, convert: (double? d) => Max == null || (d.HasValue && d.Value < Max) ? 1 : .25)
   .CenterExpand()
}.Bind(IsEnabledProperty, nameof(Value), source: this, convert: (double? d) => Max == null || (d.HasValue && d.Value < Max))
.Invoke(pv => pv.TapEvent += Increment_Tapped)

private void Increment_Tapped(object s, EventArgs e)
{
   PancakeView pv = s as PancakeView;
   OnStepperPress(pv);

   if (Value == null)
   {
      Value = 0;
   }

   if (Value < Max || Max == null)
   {
      Value += 1;
   }

   OnSubmitTap(s, e);
}

private void OnSubmitTap(object sender, EventArgs e)
{
   Tapped?.Invoke(this, e);
}

更新说明(解决方案)

通过在BindableProperty的属性变更回调方法中触发PropertyChanged,已解决该问题(参考Liqun Shen的回答)。

同时感谢@Jason提供的相同方案,此前方案未生效的原因是添加到ObservableCollection的初始对象未实例化Value或Max属性。


内容的提问来源于stack exchange,提问作者chiken nuget

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 01:40:11