簡體   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