Blazor MatSnackbar未更新MatSnackBarContent

Blazor MatSnackbar未更新MatSnackBarContent,blazor,matblazor,Blazor,Matblazor,在我的代码中,当多次打开Matsnakbar时,SnackBar中显示的内容不会像我认为的那样更新。 例如: @page "/" <div> count value: @count </div> <MatButton OnClick="ButtonClick">Open</MatButton> <MatSnackbar @bind-IsOpen="@snackBarIsOpen"> <Ma

在我的代码中,当多次打开Matsnakbar时,SnackBar中显示的内容不会像我认为的那样更新。 例如:

@page "/"

    <div> count value: @count </div>
    <MatButton OnClick="ButtonClick">Open</MatButton>
    <MatSnackbar @bind-IsOpen="@snackBarIsOpen">
        <MatSnackbarContent>Count: @count</MatSnackbarContent>
        <MatSnackbarActions>
            <MatButton Raised="true" @onclick="() => { snackBarIsOpen = false; }" >Close</MatButton>
        </MatSnackbarActions>
    </MatSnackbar>

    @code
    {
        bool snackBarIsOpen = false;
        int count = 0;

        void ButtonClick()
        {
            snackBarIsOpen = true;
            count++;
            this.StateHasChanged();
        } 
    }
@page/“
计数值:@count
打开
计数:@Count
接近
@代码
{
bool snackBarIsOpen=false;
整数计数=0;
void按钮单击()
{
snackBarIsOpen=真;
计数++;
此.StateHasChanged();
} 
}
多次单击按钮时,SnackBar始终显示“计数:1”。
我做错了什么?

当您第一次运行主页时,看到的唯一可见元素是MatButton。MatsnakBar不可见,因为其参数属性值为false:

@bind-IsOpen="@snackBarIsOpen"

bool snackBarIsOpen = false;
单击MatButton时,将执行ButtonClick事件处理程序,
snackBarIsOpen==true
,并且MatSnackbar组件将“重新呈现”。但现在该组件的等参参数值为true,因此它将与MatSnackbarContent组件的内容一起显示。下面是执行此操作的代码:

BaseMatSnackbar.cs(注意,评论是我的…)
[参数]
公共图书馆
{
get=>_isOpen;
设置
{
//创建零部件时,等参线的值为false
//并且传递给它的参数值也是false,因此
//if块中的代码未执行。
如果(等参线!=值)
{
_isOpen=值;
//单击MatButton后,IsOpen!=值,因此
//此代码由JavaScript执行以显示
//组成部分
CallAfterRender(异步()=>
{
等待JsInvokeAsync(“matBlazor.matsnakbar.setIsOpen”,参考,值);
});
}
}
}
下次单击MAT按钮时,
IsOpen==value
,将不执行上述if块,条件为
IsOpen!=值
,换句话说,如果组件已经显示,为什么要显示它

现在,无论何时点击MAT按钮,局部变量都会递增,但第一次单击“计数:1”后MatSnackbarContent的内容保持不变,换句话说,MatSnackbarContent组件不会使用新的计数值重新关联

我将在这里发布一些相关的代码,也许您可以对这些组件有一些新的了解。我不熟悉MatBlazor,我宁愿先学习Blazor的核心


希望这有助于…

当您第一次运行主页时,看到的唯一可见元素是MatButton。MatsnakBar不可见,因为其参数属性值为false:

@bind-IsOpen="@snackBarIsOpen"

bool snackBarIsOpen = false;
单击MatButton时,将执行ButtonClick事件处理程序,
snackBarIsOpen==true
,并且MatSnackbar组件将“重新呈现”。但现在该组件的等参参数值为true,因此它将与MatSnackbarContent组件的内容一起显示。下面是执行此操作的代码:

BaseMatSnackbar.cs(注意,评论是我的…)
[参数]
公共图书馆
{
get=>_isOpen;
设置
{
//创建零部件时,等参线的值为false
//并且传递给它的参数值也是false,因此
//if块中的代码未执行。
如果(等参线!=值)
{
_isOpen=值;
//单击MatButton后,IsOpen!=值,因此
//此代码由JavaScript执行以显示
//组成部分
CallAfterRender(异步()=>
{
等待JsInvokeAsync(“matBlazor.matsnakbar.setIsOpen”,参考,值);
});
}
}
}
下次单击MAT按钮时,
IsOpen==value
,将不执行上述if块,条件为
IsOpen!=值
,换句话说,如果组件已经显示,为什么要显示它

现在,无论何时点击MAT按钮,局部变量都会递增,但第一次单击“计数:1”后MatSnackbarContent的内容保持不变,换句话说,MatSnackbarContent组件不会使用新的计数值重新关联

我将在这里发布一些相关的代码,也许您可以对这些组件有一些新的了解。我不熟悉MatBlazor,我宁愿先学习Blazor的核心


希望这有帮助……

即使Snackbar关闭并重新打开,内容也不会更新。由于存在从childcontent到“count”的绑定,对count的更改应自动触发Snackbar的childcontent的重新加载程序(它不会这样做)。因此,我只能假设childcontent曾经呈现为一个静态字符串,然后在Snackbar中使用该字符串(当计数更改时,显然不会更新)。即使Snackbar关闭并重新打开,内容也不会更新。由于存在从childcontent到“count”的绑定,对count的更改应自动触发Snackbar的childcontent的重新加载程序(它不会这样做)。因此,我只能假设childcontent曾经呈现为一个静态字符串,然后在Snackbar中使用该字符串(当计数发生变化时,显然不会得到更新)。