如何在 Blazor 中更新绑定变量更新 类

How to update classes on binded variable update in Blazor

我的其中一个对象有绑定跨度值 属性

<span class="badge badge-primary">@MyObject?.MyProperty</span>

我希望能够根据其内容(绑定变量)更新我的跨度 classes

我能想到的唯一方法是在跨度的属性内再次绑定变量并相应地声明我的 css classes

<span class="badge badge-primary" value="@MyObject?.MyProperty">@MyObject?.MyProperty</span>
.badge[value="myvalue"]{
    background-color:white;
}

这个方法的问题是

由于我对 MVVM 和数据绑定有点陌生,有没有 "right" 方法可以做到这一点?

您可以像下面这样操作,并且可以添加任意数量的属性,每个代表一个不同的 CSS class。

@page "/"

 <span class="badge badge-primary @myObject?.MyProperty">
                             @myObject?.MyProperty</span>

@code
{
     MyObject myObject = new MyObject();

     public class MyObject
     {
          public string MyProperty { get; set; } = "myvalue";
     }
 }

希望这对您有所帮助...

根据建议更新:

<span class="badge @statusColor">@myObject?.MyProperty</span> 

@code{

private string color = "red";

public string statusColor
{
    get
    {
        if (myObject?.MyProperty == "something")
            color = "blue";

        return color;
    }
}

MyObject myObject = new MyObject();

public class MyObject
{
    public string MyProperty { get; set; }
}
}

希望这就是您要找的。我的第一个答案只是为了演示如何绑定到跨度的 class 属性,而您并不知道这一点。至于其他的,你可以为所欲为,达到你的目的...

上述答案中的 属性 方法有点局限:对于每个要着色的 属性,您实际上必须有一个 statusColor 属性。其实,你可以绑定一个函数:

<span class="badge badge-primary @(statusColor(myObject?.MyProperty))">@myObject?.MyProperty</span>

@code
{
    private string statusColor(MyClass myProperty) =>
        myProperty switch
        {
           "something" => "blue",
           "somethingelse" => "red",
           _ => "black"
        }
}

如果你的 class 选择逻辑不是太复杂,你甚至可以使用 lambda:

<span class="badge badge-primary @(()=> myObject?.MyProperty == "something" ? "blue" : "black")">@myObject?.MyProperty</span>