属性值更改时如何通知 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 Server App MVVM-Pattern:通过 Startup.cs 中的服务类从 App-State 的子组件更改中获取父级通知