[英]Binding in Blazor with Base & Derived classes
我一直试图想出最好的方法来做到这一点,但我想不出我认为合适的解决方案。 基本上我有以下几点:
Base Class Animal
Derived Class Dog : Animal
Derived Class Bird : Animal
现在在我的页面上,我的绑定总是会出现在基类中,但是在某些情况下,页面上有派生对象的绑定。 这个基类也是当前页面加载的参数,所以我不太确定这里的最佳方法。 它看起来像下面的东西。
[Parameter] Animal Animal {get; set;}
然后在页面上我做这样的绑定:
<input text=@bind-Value=@Animal.Name/>
我的问题是,如果抓取的基类是派生对象的类型,我将如何添加它以便可以映射派生对象属性?
如果动物是鸟,我也可以绑定这样的属性:
public class Animal
{
public string Name {get; set;}
}
public class Bird : Animal
{
public string Wing {get; set;}
}
<input text=@bind-Value=@Animal.Name/>
<input text=@bind-Value=@Animal.Wing/>
这样的事情是可能的还是我没有适当地构建我的课程? 任何见解将不胜感激。
我遇到了同样的问题,我通过为每个派生类型创建一个组件和一个 switch 语句来解决它:
public abstract class Animal
{
public abstract string KindName { get; }
public string Name { get; set; }
}
public class Bird : Animal
{
public override string KindName => "Bird";
public string Wing {get; set;}
}
动物组件.cs
public abstract class AnimalComponent<T> where T: Animal
{
[CascadingParameter]
public T Animal{ get; set; }
}
鸟剃刀
@inherits AnimalComponent<Bird>
<input text=@bind-Value=@Animal.Wing/>
AnimalPage.razor
<CascadingValue Value="Animal">
<input text=@bind-Value=@Animal.Name/>
@switch (Animal.KindName)
{
case "Bird":
<Bird />
break;
...
}
</CascadingValue>
@code {
[Parameter] Animal Animal {get; set;}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.