if / else式を再評価する原因は何ですか?

asp.net-core blazor c#

質問

私のMainLayout.cshtmlにあるBlazorのホストテンプレートを使って、私は次のようなことができます:

@inject UserInfo userInfo
@if(userInfo.Name == "bob")
{
    <div class="login-panel">
        <p>Hi Bob!</p>
    </div>
}
else
{
    <LoginPanel />
}

そして、別のLogin.cshtmlで:

@inject UserInfo userInfo
async void Login()
{
    userInfo.Name = "bob";
}

ログインしてもMainLayout.cshtmlの 'login-panel'に変更はありません。すべてが単一のファイルであり、特定の変数がnullであるかどうか( ここを参照)のみをチェックしているので、Blazorフレームワークには特定の条件があり、そのようなブロックを評価する。これは正確ですか?もしそうなら、この再評価を強制する最善の方法は何ですか?

編集:私はそれをもう少し周りに遊んで、最終的には、私はInitが完了した後に呼び出されると仮定して、前の例が動作するStateHasChanged保護されたメンバー関数を発見した。私の実際の解決策は、私のUserInfoオブジェクトにINotifyPropertyChanged実装させ、MainLayout.cshtml内に変更ハンドラを登録して、ログイン状態が変わったときに更新する必要があるビューのStateHasChanged()を呼び出すことです。

受け入れられた回答

はい。 Blazorは、 INotifyPropertyChangedようにStateHasChangedというStateHasChangedものを使用します。

ただし、 XAMLフレームワークでは、 XAMLINotifyPropertyChangedを呼び出したプロパティのみを更新しますが、 StateHasChangedが呼び出されるとRazorでUIフレームワークが要素のUIツリー全体をリフレッシュします( 少なくとも現在 )。 。その後、あなたが行っていない場合、 StateHasChangedか。要素が入力を取得すると(ボタンをクリックしている)、ブレザーは自動的にStateHasChangedをフードの下に設定します。

もっと読む "

https://github.com/aspnet/Blazor/issues/409

https://learn-blazor.com/pages/data-binding/

https://github.com/aspnet/Blazor/issues/359

https://github.com/aspnet/Blazor/issues/407




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ