Blazorで画面をマニュアル更新する

提供: MonoBook
移動先: 案内検索

Blazorではバインディング変数の値を更新しても画面が自動更新されないことがある。

そのような場合は明示的に「StateHasChangedメソッド」を叩いて手動更新するとよい。このメソッドはVisual Studio for Macインテリセンスでは何故か出てこないが、ビルドも通るし、実行してもちゃんと動く。不思議。

実装例[編集 | ソースを編集]

Time.cshtml

<p>@now</p>
<input type="text" bind="@now" />

@using System.Threading
@functions
{
    string now { get; set; } = "xyz";

    protected override void OnInit()
    {
        var timer = new Timer(new TimerCallback(_ =>
        {
            // バインディング変数を更新
            now = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            // 手動更新させる
            this.StateHasChanged();

        }), null, 0, 1000);
    }
}

関連項目[編集 | ソースを編集]