无法通过Binding禁用MAUI中的Entry控件
解决方案
问题核心在于IsWrong作为计算属性,未在依赖值变化时通知UI更新。尽管InputAnswer的绑定正常,但当它的值改变时,IsWrong的取值逻辑已变化,却没有触发PropertyChanged事件,导致UI无法感知IsWrong的状态变更,Entry控件自然不会被禁用。
需要做以下两处修改:
1. 完善InputAnswer的属性实现
将InputAnswer的自动属性改为手动实现,在set方法中触发自身的PropertyChanged,同时额外触发IsWrong的PropertyChanged通知(因为IsWrong的取值完全依赖InputAnswer):
private int? _inputAnswer; public int? InputAnswer { get => _inputAnswer; set { if (_inputAnswer != value) { _inputAnswer = value; OnPropertyChanged(nameof(InputAnswer)); // 通知UI:IsWrong属性已变更 OnPropertyChanged(nameof(IsWrong)); } } }
2. 确保INotifyPropertyChanged接口实现正确
确认你的类已完整实现INotifyPropertyChanged接口,比如包含以下基础代码:
public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }
验证效果
修改完成后,当用户输入的值与CorrectAnswer相等时:
- InputAnswer更新,触发自身和IsWrong的属性变更通知
- IsWrong的取值变为
false,Entry的IsEnabled绑定会自动同步这个状态,控件随之禁用
这样就能实现「输入正确值后禁用Entry」的需求。
内容的提问来源于stack exchange,提问作者jason.kaisersmith
相关产品推荐
相关产品推荐

