【问题标题】:MatSnackBar Content (Blazor) Not updatingMatSnackBar 内容 (Blazor) 未更新
【发布时间】:2020-07-20 15:49:20
【问题描述】:

我已经看到了这个问题,但并没有真正得到回答: MatSnackbar not updating MatSnackBarContent 我有类似的问题,我想看看是否有人知道解决方案。

我有一个简单的例子:

     <div>Snackbar Status Message =  @StatusMessage</div>  <<< This shows the actual value
    
    <MatSnackbar @bind-IsOpen="@statusBarIsOpen">
        <MatSnackbarContent   >@StatusMessage</MatSnackbarContent>   <<< This should show the same
    </MatSnackbar>

我正在通过用户表单上的自定义事件回调更新@StatusMessage,并希望显示更新是否成功。 (我能想象到的一个很常见的用例?)

    // This is the callback handler for the 'OnUserSaved' callback
    protected void UserSaved(string statusmessage)
    {
        StatusMessage = statusmessage;     <<< Update the status message
        statusBarIsOpen = true;            <<< Open the snackBar / status bar
        this.StateHasChanged();            <<< fire the changed event
        isOpened = false;                  <<< this closes the form
    }

第一次,StatusMessage 正确呈现。之后,它只是固定在第一条消息上。虽然上面正确显示了状态。我的意思是是的,我可以使用上面的行并清除它等等。但是,MatSnackBar 是做什么用的? 我是否缺少一些明确的功能,还是我做错了?

【问题讨论】:

  • 那么回调线程安全吗?这个问题不是自包含的。添加一个按钮来调用UserSaved(),看看是否有效。
  • 我会在早上试一试,但鉴于
    Status Message 等...绑定得很好,我并不乐观...希望我不得不吃字??? ?...
  • 我不知道这些组件,但我的感觉是,因为您没有更改 MatSnackBar 上的任何公共参数,所以 Blazor 不知道它需要渲染。您可以简单地使用&lt;MatSnackBarContent ChildContent=@StatusMessage /&gt; 来测试它。如果还是不行,试试&lt;MatSnackBarContent data-message=@StatusMessage &gt;@StatusMessage&lt;/MatSnackBarContent&gt;。 “data-message”只是编造出来的,但由于基础组件接受属性喷溅,它应该将此视为渲染的原因。
  • 我也会在早上尝试一下。但是根据我在这个主题中引用的上一个问题,我在调用小吃店渲染之前更改了消息的值......虽然 Childcontent 可能会这样做,但我会看看。我想我希望为 matblazor 做出贡献的人可能知道。如果这些想法不起作用,也许我会在 GitHub 上提出它......谢谢......
  • 我确实找到了解决方案,但我尝试了不同的库“Blazorise”。这显然有不同的工作方式,并且具有“显示”和“隐藏”功能。所以通过使用@ref=snackbar,在我的UserSaved 函数中调用snackbar.Show() 是很简单的。我现在要保留两个库,看看我是怎么走的。再次感谢。

标签: c# blazor matblazor


【解决方案1】:

github 上的solution 使用此解决方法解决了:

@if(@statusBarIsOpen)
{
    <MatSnackbar @bind-IsOpen="@statusBarIsOpen">
        <MatSnackbarContent>@StatusMessage</MatSnackbarContent>
    </MatSnackbar>
}

【讨论】:

  • 感谢您的想法。正如我上面提到的,我现在切换到 Blazorise,总体而言,这似乎更适合浏览器中的 c# 对我来说“感觉”。再次感谢。
猜你喜欢
相关资源
最近更新 更多
热门标签