Когда вы запускаете свою домашнюю страницу в первый раз, единственным видимым элементом является MatButton. MatSnackbar не виден, поскольку его значение атрибута параметра равно false:
@bind-IsOpen="@snackBarIsOpen"
bool snackBarIsOpen = false;
Когда вы нажимаете MatButton, выполняется обработчик события ButtonClick, snackBarIsOpen == true
, и компонент MatSnackbar «перерисовывается». Но теперь значение параметра IsOpen компонента равно true, и поэтому оно отображается вместе с содержимым компонента MatSnackbarContent. Ниже приведен код, который делает это:
BaseMatSnackbar.cs (обратите внимание, мои комментарии ...)
[Parameter]
public bool IsOpen
{
get => _isOpen;
set
{
// When the component is created the value of IsOpen is false
// and the parameter value passed to it is also false, so the
// code within the if block is not executed.
if (IsOpen != value)
{
_isOpen = value;
// After clicking the MatButton IsOpen != value, and thus
// this code is executed by JavaScript to display the
// component
CallAfterRender(async () =>
{
await JsInvokeAsync<object>("matBlazor.matSnackbar.setIsOpen", Ref, value);
});
}
}
}
Когда вы нажимаете MatButton в следующий раз IsOpen == value
,выше, если блок не выполняется, условие IsOpen != value
, другими словами, зачем отображать компонент, если он уже отображается.
Теперь, когда вы нажимаете MatButton, локальная переменная увеличивается, но содержимое MatSnackbarContent остается неизменным после первого щелчка: «Count: 1», другими словами, компонент MatSnackbarContent не являетсяперерисован с новым значением count.
Я опубликую здесь часть соответствующего кода, и, возможно, вы сможете пролить некоторый новый свет на эти компоненты. Я не знаком с MatBlazor, и я бы лучше сначала изучил ядро Blazor ...
https://github.com/SamProf/MatBlazor/blob/master/src/MatBlazor.Web/src/matSnackbar/matSnackbar.js
https://github.com/SamProf/MatBlazor/blob/master/src/MatBlazor/Components/MatSnackbar/MatSnackbar.razor
https://github.com/SamProf/MatBlazor/blob/master/src/MatBlazor/Components/MatSnackbar/BaseMatSnackbar.cs
Надеюсь, это поможет ...