属性值更改时如何通知 Blazor Framework

Posted

技术标签:

【中文标题】属性值更改时如何通知 Blazor Framework【英文标题】:How Blazor Framework get notifed when the property value gets changed 【发布时间】:2018-08-01 21:31:51 【问题描述】:

当我们有如下的 html 代码时。

<h1>@Title</h1>

和 C# 如下所示

public string Title  get; set; 

认为我已经执行了如下代码

Title = "New title updated in the runtime";

然后我们看到视图已经变成了新的值。

渲染器如何知道属性值发生了变化。 有没有像INotifyProperyChange 这样的实现。 HTML 如何知道这是更新内容的时间。

我只是想知道 Blazor 框架的内部结构是如何构建的。

【问题讨论】:

@mjwills 它是一个仍在试验中的新开源框架,目前由微软支持。它将 C# .Net(.net 标准)定位到 Web 程序集。 github.com/aspnet/Blazor 我认为现在有一个@bind 标签 @RichBryant ,我只想知道 Blazor 框架的内部结构如何。 它在外部也很有用,例如,如果您希望更改一个值来触发另一个功能。 【参考方案1】:

当发生用户交互(例如,按钮单击、输入中的文本发生更改)时,Blazor 会自动检查绑定属性的更改。在这种情况下,Blazor 的 javascript 代码会触发 C# (=Webassembly) 中的更改检测。因此,如果您想在用户交互后刷新 UI,则无需执行任何操作。

但是,在某些情况下,您希望在未发生用户交互的情况下刷新 UI(例如计时器)。在这种情况下,您必须致电StateHasChanged。我在learn-blazor.com 上创建了一个更详细的示例。

【讨论】:

但是这种变化检测是如何工作的呢?它是否检查所有属性的更改?是不是很慢?

以上是关于属性值更改时如何通知 Blazor Framework的主要内容,如果未能解决你的问题,请参考以下文章

通过 javascript 在 Blazor 中更改输入值不会更改它的绑定属性值

如何在 Blazor 中编写自定义值更改事件处理程序?

托管对象发生故障时如何正确处理 KVO 通知?

一次学俩Vue&Blazor:1.4基础-响应式数据

Blazor Server App MVVM-Pattern:通过 Startup.cs 中的服务类从 App-State 的子组件更改中获取父级通知

如何通知所有窗口静态属性已更改?