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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:45:01