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

Blazor MAUI Hybrid中OnPropertyChanged无法正常工作的问题

问题解决方法

核心原因

Blazor不会自动监听外部单例服务的PropertyChanged事件,且异步方法中设置Loading状态后,后续的await操作可能导致UI线程没有及时渲染更新。

解决方案步骤

1. 在Blazor组件中订阅服务的属性变更事件

修改Blazor页面代码,注入服务并订阅PropertyChanged事件,触发组件状态更新:

@page "/LoginComponent"
@inject NetworkStatusService NetworkStatusService
@implements IDisposable

<div class="Grid">
    @switch (NetworkStatusService.NetwStat)
    {
        case NetwStatus.Loading:
            <h6 style="font-size:0.8rem; margin-bottom:-12px; color:coral">Trying to connect...</h6>
            break;
        case NetwStatus.Success:
            <h6 style="font-size:0.8rem; margin-bottom:-12px; color:green">Connected successfully.</h6>
            break;
        case NetwStatus.Fail:
            <h6 style="font-size:0.8rem; margin-bottom:-12px; color:red">Connection failed.</h6>
            break;
        default:
            break;
    }    
    <i @onclick="ViewModel.btnNetwOkCommand.ExecuteAsync">refresh</i>
</div>

@code {
    protected override void OnInitialized()
    {
        // 订阅属性变更事件,触发组件重新渲染
        NetworkStatusService.PropertyChanged += (_, __) => StateHasChanged();
    }

    public void Dispose()
    {
        // 取消订阅,避免内存泄漏
        NetworkStatusService.PropertyChanged -= (_, __) => StateHasChanged();
    }
}

2. 让UI有机会渲染Loading状态

修改NetworkStatusService的CheckNetw方法,在设置Loading状态后添加await Task.Yield(),让出线程给UI渲染:

public async Task CheckNetw()
{
    NetwStat = NetwStatus.Loading;
    await Task.Yield(); // 让出线程,确保UI先渲染Loading状态

    await Task.Delay(1000);

    if (await SomeClass.CheckDBConnection())
        NetwStat = NetwStatus.Success;
    else
        NetwStat = NetwStatus.Fail;
}

3. 确认命令调用的异步正确性

确保ViewModel.btnNetwOkCommand的ExecuteAsync方法是正确异步调用CheckNetw,避免使用.Wait()或.Result()等阻塞操作,示例:

// 命令实现示例
public IAsyncCommand btnNetwOkCommand => new AsyncCommand(async () =>
{
    await NetworkStatusService.CheckNetw();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:42:36