参数变更的执行方法

时间:2019-01-24 11:17:57

标签: c# onchange blazor

给出一个孩子和一个父组件,我试图在child发生变化(来自父)的情况下使用parameter执行一个方法。

父母

<Child value=@IsChanged></Child>

<button onclick="Update"></button>

@functions(){
  public bool IsChanged{get;set;}
  public void Update()
  {
   this.IsChanged!=this.IsChanged;
  }

孩子

@(value?"True":"False")
@functions()
{
  [Parameter]
  protected bool value {get;set;}

  public void SideEffect()
  {
    Console.WriteLine("has changed"); //i want this method executed when value changes from parent
  }

如您所见,我需要在参数的Child内执行该方法。该参数在父对象中已更改。

PS
我看过onchange事件处理程序,但是我需要在[Parameter]上执行。

3 个答案:

答案 0 :(得分:3)

这是针对您问题的最佳且简单的解决方案

 @functions()
    {
       // private backing field for setting and retrieving the property  value
       bool _value;
      [Parameter]
      protected bool MyValue {
          get{return _value;}
          set {
            _value = value;
            // Call the SideEffect method whenever a new value is assigned to the property. 
            this.SideEffect();
          }
       }
      public void SideEffect()
      {
        Console.WriteLine("has changed"); //i want this method executed when value changes from parent
      }

答案 1 :(得分:1)

您应该覆盖OnParameterSetOnParameterSetAsync生命周期方法。

孩子

@(value?"True":"False")
@functions()
{
  [Parameter]
  protected bool value {get;set;}

  protected override void OnParametersSet()
  {
      Console.WriteLine("a parameter has changed");
  }
}

答案 2 :(得分:1)

根据您的代码,每当单击“父组件”中的“更新”按钮时,子组件的“值”属性的值就会更新。这应该工作。 现在,在子组件中,您希望SideEffect方法在“ value”属性的值发生更改时运行,并且您想知道如何做到这一点,对吗? 您可以将子组件的对象引用传递给父组件,父组件可以使用它来调用子组件上的SideEffect方法,如下所示:

public void Update()
  {
   this.IsChanged!=this.IsChanged;
   // Code to call the SideEffect method on the Child Component
  }

当然,还有其他更好的方法可以达到此目的。您可以在“父组件”中使用事件委托,只要单击“更新”按钮,子组件就可以订阅该事件委托。您可以阅读我对上一个问题的回答,以了解如何做。 您甚至可以使用C#INotifyPropertyChanged来实现这一点。

如果我的回答对您有帮助,请标记为已接受 希望这会有所帮助...