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

如何在.NET MAUI中通过OnIsSwitchChanging与ObservableProperty取消属性变更?

在.NET MAUI中通过OnIsSwitchChanging取消ObservableProperty的属性变更

直接使用OnIsSwitchChanging无法直接取消属性变更,因为该方法是属性值变更前的通知方法,没有返回值来阻止变更操作。以下是两种可行的实现方案:

方案一:手动实现属性Setter(推荐)

禁用ObservableProperty自动生成的Setter,手动编写逻辑控制是否允许属性变更:

private bool _isSwitch;

public bool IsSwitch
{
    get => _isSwitch;
    set
    {
        // 满足条件时直接返回,取消变更
        if (someConditions)
            return;

        if (_isSwitch != value)
        {
            _isSwitch = value;
            OnPropertyChanged();
        }
    }
}

方案二:结合标记位回滚旧值

如果必须使用OnIsSwitchChanging,可以通过设置回旧值的方式取消变更,但需要添加标记位避免无限循环:

private bool _isChanging;

[ObservableProperty]
private bool isSwitch;

partial void OnIsSwitchChanging(bool oldValue, bool newValue)
{
    if (someConditions && !_isChanging)
    {
        _isChanging = true;
        // 强制将属性值回滚到旧值
        IsSwitch = oldValue;
        _isChanging = false;
    }
}

注意事项

  • 方案一逻辑更清晰,避免了额外的变更通知和循环风险,优先推荐。
  • 方案二中的_isChanging标记必须添加,否则设置旧值会再次触发OnIsSwitchChanging,导致无限循环。
  • 将代码中的someConditions替换为你的具体判断逻辑(如用户未确认、权限不足等)。

内容的提问来源于stack exchange,提问作者Alpay Çalışır

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:54:50