C# 怎么在 Blazor 中进行组件间通信_C# Blazor 组件通信方法详解

煙雲
发布: 2025-11-12 20:02:02
原创
851人浏览过
父组件通过Parameter传值,子组件用EventCallback回调,双向绑定用@bind,跨组件通信依赖服务注入。

c# 怎么在 blazor 中进行组件间通信_c# blazor 组件通信方法详解

在 Blazor 中,组件间通信是构建模块化、可维护应用的关键。由于 Blazor 是单页应用框架,组件之间默认是独立的,因此需要明确的方式进行数据传递和方法调用。以下是几种常用的组件通信方式,适用于不同场景。

1. 父组件向子组件传递数据(通过参数)

这是最基础的通信方式。使用 [Parameter] 特性将数据从父组件传入子组件。

示例:

子组件 ChildComponent.razor:

@code {
    [Parameter] public string Message { get; set; } = string.Empty;
}

<div>接收到的消息:@Message</div>

父组件 ParentComponent.razor:

<ChildComponent Message="你好,子组件!" />

只要 Message 属性被标记为 [Parameter],父组件就可以通过属性绑定方式传值。

2. 子组件向父组件通知事件(通过回调委托)

子组件无法直接调用父组件的方法,但可以通过 EventCallback 实现反向通信。

子组件 ChildComponent.razor:

@code {
    [Parameter] public EventCallback OnMessageSent { get; set; }

    private async Task SendMessage() {
        await OnMessageSent.InvokeAsync("这是来自子组件的消息");
    }
}

<button @onclick="SendMessage">发送消息给父组件</button>

父组件 ParentComponent.razor:

@code {
    private void HandleMessage(string msg) {
        Console.WriteLine(msg);
    }
}

<ChildComponent OnMessageSent="HandleMessage" />

这种方式实现了子组件触发、父组件响应的事件机制。

通义万相
通义万相

通义万相,一个不断进化的AI艺术创作大模型

通义万相 596
查看详情 通义万相

3. 使用双向绑定(Two-way Binding)

当需要父子组件共享一个值并同步更新时,可以使用 @bind 实现双向绑定。

子组件 EditableValue.razor:

@code {
    [Parameter] public string Value { get; set; } = string.Empty;
    [Parameter] public EventCallback ValueChanged { get; set; }

    private async Task OnInput(ChangeEventArgs e) {
        if (e.Value is string input) {
            await ValueChanged.InvokeAsync(input);
        }
    }
}

<input value="@Value" @oninput="OnInput" />

父组件中使用:

<EditableValue @bind-Value="sharedText" />
@code {
    private string sharedText = "初始值";
}

Blazor 会自动识别 Value 和 ValueChanged 配对,实现双向同步。

4. 跨层级或非父子组件通信(使用依赖注入服务)

当组件层级较深或没有直接关系时,推荐使用一个共享的服务来管理状态和通信。

定义一个状态服务:

public class MessageService {
    public string CurrentMessage { get; private set; } = string.Empty;

    public event Action? OnMessageChanged;

    public void UpdateMessage(string message) {
        CurrentMessage = message;
        OnMessageChanged?.Invoke();
    }
}

在 Program.cs 中注册服务:

builder.Services.AddSingleton();

任意组件中注入并使用:

@inject MessageService MessageService

@code {
    protected override void OnInitialized() {
        MessageService.OnMessageChanged += StateHasChanged;
    }

    private void SendMessage() {
        MessageService.UpdateMessage("新消息");
    }

    public void Dispose() {
        MessageService.OnMessageChanged -= StateHasChanged;
    }
}

这种模式类似于“发布-订阅”,适合全局状态管理,如用户登录状态、主题切换等。

基本上就这些。根据组件关系选择合适的方式:父子用 Parameter 和 EventCallback,深层或跨组件用服务注入。不复杂但容易忽略细节,比如事件注销和绑定命名规则。掌握这些,Blazor 组件通信就很清晰了。

以上就是C# 怎么在 Blazor 中进行组件间通信_C# Blazor 组件通信方法详解的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号