如何将值绑定到类属性?

Posted

技术标签:

【中文标题】如何将值绑定到类属性?【英文标题】:How to bind a value to a class property? 【发布时间】:2022-01-01 17:25:24 【问题描述】:

我是 Web 开发新手,也是 C#/Blazor 新手。

因此,我正在从事我的一个宠物项目。在这个项目中,我有一个页面,我希望用户在其中输入一些数字。

我想动态地将这些值绑定到一个类,然后使用该类执行计算并动态显示这些结果,以便用户更改输入后,无需单击即可更新结果“提交”按钮或类似的东西。因此,基本想法是拥有某种实时计算器。

我正在使用 MudBlazor 框架来加快速度。 这是我位于Pages/Project.razor 的起始代码:

<MudItem xs="12" sm="6" md="4">
  <MudNumericField @bind-Value="Project.NumDays" Label="Number of days" Variant="Variant.Text" Min="0" Max="10000" />
</MudItem>

@code 
  public class Project
  
    public string NumDays // property
     get; set; 
  

现在,应用程序声明它无法识别 Project 类。 我怎样才能达到我想要的?这可能吗 ?还是我需要在Pages 目录之外定义Project 类?

【问题讨论】:

AFAIK 在@code 部分中,您将放置页面的成员,而不是类定义。查看来自 Microsoft 的 ASP.NET Core Blazor data binding 文档 【参考方案1】:

您必须实例化 Project 类...您不能将类定义标识符用作 @bind-Value 指令属性的值。这样做:

Project project = new Project();

您的代码应如下所示:

<MudItem xs="12" sm="6" md="4">
  <MudNumericField @bind-Value="project.NumDays" Label="Number of days" Variant="Variant.Text" Min="0" Max="10000" />
</MudItem>


@code 
    Project project = new Project();

  public class Project
  
    public string NumDays  get; set;  // property
    
  

请注意,项目实例以小写p开头

【讨论】:

我在位于Data 目录中的一个单独的.cs 文件中定义了Project 类,它无需实例化即可工作。我认为 blazor 无论如何都会在幕后做一些事情来实例化它。 在哪里定义类没有区别。类定义只是一个模板,您必须始终创建类的实例。不知道为什么你做了什么,没有导致编译错误......

以上是关于如何将值绑定到类属性?的主要内容,如果未能解决你的问题,请参考以下文章

Flex 警告:无法绑定到类“Object”上的属性“foo”(类不是 IEventDispatcher)

将标签绑定到类的属性

XAML:将文本框最大长度绑定到类常量

使用 RxSwift 将多个 UITextField 绑定到类道具

当我在 asp.net mvc 5 中达到类用户身份时,如何获得新属性?

特性和静态方法