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