Выполнение метода при изменении параметра - PullRequest
0 голосов
/ 24 января 2019

Учитывая дочерний и родительский компонент, я пытаюсь выполнить метод с child, когда parameter изменился (из родительского).

Родительский

<Child value=@IsChanged></Child>

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

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

Child

@(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 onchange параметра. Параметр изменяется в родительском элементе..

PS
Я посмотрел на обработчик событий onchange, но мне нужно выполнить на [Parameter].

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Согласно вашему коду, при каждом нажатии кнопки «Обновить» в родительском компоненте значение свойства «значение» дочернего компонента обновляется. Это должно работать. Теперь в дочернем компоненте вы хотите, чтобы метод SideEffect запускался всякий раз, когда значение свойства «value» изменилось, и вы хотите знать, как это сделать, верно ???? Вы можете передать ссылку на объект дочернего компонента на родительский компонент, который может использовать его для вызова метода SideEffect на дочернем компоненте следующим образом:

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

Конечно, есть и другие способы, возможно, лучше, для достижения этой цели. Вы можете использовать делегат события в родительском компоненте, который срабатывает при каждом нажатии кнопки «Обновить», на которую может подписаться ваш дочерний компонент. Вы можете прочитать мой ответ на свой предыдущий вопрос, чтобы получить представление о том, как это сделать. Вы даже можете использовать C # INotifyPropertyChanged для реализации этого.

Пожалуйста, отметьте мой ответ как принятый, если он вам помог Надеюсь, это поможет ...

0 голосов
/ 24 января 2019

Это лучшее и более простое решение вашего вопроса

 @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
      }
0 голосов
/ 24 января 2019

Вы должны переопределить метод жизненного цикла OnParameterSet или OnParameterSetAsync.

Child

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

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