OnPropertyChanged事件无法切换Button可见性问题排查求助
问题原因
你的代码存在三个核心问题,导致可见性不生效:
IsSaveButtonVisible的属性通知参数错误:set方法中调用OnPropertyChanged时需要传入对应属性的名称,你当前填写的???无法让UI感知到该属性发生了变更。- 业务逻辑位置错误:你将URL校验、更新按钮状态的逻辑写在了
OnPropertyChanged重载方法中,这个方法的核心作用是触发属性变更通知,不应该承载业务校验逻辑。 - 没有修改可见性属性值:你全程没有对
IsSaveButtonVisible进行赋值操作,仅触发PropertyChanged事件不会改变绑定的属性值,UI自然不会更新。
修正方案
1. 修复IsSaveButtonVisible的属性通知
private bool m_isSaveButtonVisible = true; public bool IsSaveButtonVisible { get => m_isSaveButtonVisible; set { m_isSaveButtonVisible = value; // 传入属性名通知UI更新,用nameof避免硬编码错误 OnPropertyChanged(nameof(IsSaveButtonVisible)); } }
2. 调整URL校验逻辑的触发位置
在Url属性变更时执行正则校验,直接更新IsSaveButtonVisible的值即可:
private string m_url; public string Url { get => m_url; set { m_url = value; OnPropertyChanged(nameof(Url)); // Url发生变化时触发按钮可见性校验 UpdateSaveButtonVisibility(); } } private void UpdateSaveButtonVisibility() { if (MeetingRole != WebRTCMeetingRole.Join) { IsSaveButtonVisible = false; return; } // 直接将正则校验结果赋值给可见性属性 IsSaveButtonVisible = Regex.Match(Url, URL_PATTERN, RegexOptions.IgnoreCase).Success; }
3. 还原OnPropertyChanged的基础实现
移除写在该方法内的业务逻辑,仅保留触发通知的基础功能:
public event PropertyChangedEventHandler PropertyChanged; protected override void OnPropertyChanged(PropertyChangedEventArgs args) { PropertyChanged?.Invoke(this, args); }
无需修改的部分
你提供的XAML绑定、BooleanToVisibilityConverter的使用都是正确的,不需要调整。
内容的提问来源于stack exchange,提问作者KSler
相关产品推荐
相关产品推荐

