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

提供: MonoBook
2019年3月14日 (木) 04:06時点における180.15.192.154 (トーク)による版 (ページの作成:「 Blazorではバインディング変数の値を更新しても画面が自動更新されないことがある。 そのような場合は明示的に「StateHasChange…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

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);
    }
}

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