给出一个孩子和一个父组件,我试图在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]
上执行。
答案 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)
您应该覆盖OnParameterSet
或OnParameterSetAsync
生命周期方法。
孩子
@(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来实现这一点。
如果我的回答对您有帮助,请标记为已接受 希望这会有所帮助...