【问题标题】:Check if EventCallback has been set Blazor检查是否设置了 EventCallback Blazor
【发布时间】:2020-05-11 04:17:16
【问题描述】:

有没有办法检查EventCallback 是否已设置为某个值。我将我的设置在组件外部,如果已设置 EventCallback,则只想在组件内部显示某些内容。

【问题讨论】:

    标签: blazor


    【解决方案1】:

    您可以在 EventCallback 参数上使用 HasDelegate 属性。这将返回一个布尔值,指示事件调度程序是否为非空

    [Parameter]
    public EventCallback DoSomething { get; set; }
    
    private bool IsEventSet => DoSomething.HasDelegate;
    

    【讨论】:

      【解决方案2】:

      EventCallBack 是一个结构体。我期待同样的事情,例如检查 EventCallBack 是否不为空的方法,但由于它是一个结构,如果未设置 EventCallback.InvokeAsync() 不会引发错误,这违背了我大脑中的 C# 编译器。

      在此示例中,如果错误处理程序未设置为某个值,则永远不会引发异常,因为 Struct 不能为空。对我来说有点违反逻辑,但它没有什么可调用的,因此不会引发错误。

      [Parameter] public EventCallback<string> OnReset { get; set; }
      
      private void ResetFinished()
      {  
          try
          {
              // Notify the client the Reset button was clicked.
              OnReset.InvokeAsync("Reset");
          }
          catch (Exception error)
          {
              // for debugging only
              string err = error.ToString();
          }                
      }
      

      【讨论】:

      • Kinda ..在我的实验中,HasDelegate 将是 false 如果什么都没有通过。但是,如果您想在某些情况下传递EventCallback.Empty 之类的东西,而在其他情况下真正的回电HasDelegate 将是true。奇怪的行为恕我直言。
      猜你喜欢
      • 1970-01-01
      • 2020-05-06
      • 2012-03-10
      • 1970-01-01
      • 2014-09-15
      • 2011-02-07
      • 2016-12-05
      • 1970-01-01
      相关资源
      最近更新 更多