繁体   English   中英

在 Blazor 中使用基类和派生类进行绑定

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM