【问题标题】:Is Blazor (.Net core 3.1) partial class equivalent to `@inject ViewModel`?Blazor (.Net core 3.1) 部分类是否等同于`@inject ViewModel`?
【发布时间】:2020-04-17 03:46:00
【问题描述】:

默认的 Blazor 基架代码将 C# 代码与 .razor 文件中的标记代码混合在一起。

在此视频https://brianlagunas.com/lets-learn-blazor-mvvm-with-blazor/ 中,它介绍了适用于 blazor 的 MVVM。在 .razor 文件中,您只需添加以下两行。

@using ViewModels
@inject ViewModel1 ViewModel

C# 类 ViewModels.ViewModel1 是 ViewModel 类。并且.razor 可以绑定[参数]属性。

namespace ViewModels
{
    public class ViewModel1
    {
        [parameter]
        ....

现在 .Net 3.1 Blazor 添加了局部类,你只需要创建一个与 Blazor 组件同名的局部类。 Razor 标记可以绑定到 C# 部分类的属性。

这两个本质是一回事吗?

【问题讨论】:

  • Blazor 中的部分类功能本质上允许您从 WinForms 或 WPF 中知道的“代码隐藏”。
  • 您不应该太努力地将成熟的 MVVM 应用到 Web 应用程序中。在 WPF MVVM(这就是 MVVM 最初发明的目的,用于 WPF 绑定功能)中,您应该将表示逻辑放入 ViewModel 和属性更改通知中。 (INotifyPropertyChangedICommand)都不适用于 html。 Web 应用程序中的 ViewModel 更接近于 MVC 中的 ViewModel,它们只是 DTO,将数据带入特定的形状,便于视图使用。
  • 您在链接的视频中看到绑定组件参数不起作用并且添加一个属性只是为了“绕过”绑定到较低的类只是冗余代码(这正是INotifyPropertyChanged试图在 WPF 的 MVVM 中解决)
  • 那么在视频中使用新的部分类应该优于MVVM方法?

标签: asp.net asp.net-core razor blazor


【解决方案1】:

是的,.razor 文件中的 @code {} 块和代码隐藏 partial 类可以做同样的事情,但语法不同。

您可以在代码隐藏partial 类中使用 C# Inject 属性:

[Inject]
public ViewModel1 ViewModel { get; set; }

【讨论】:

    猜你喜欢
    • 2020-04-10
    • 2020-02-27
    • 2020-04-12
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2021-11-06
    • 2013-04-13
    • 1970-01-01
    相关资源
    最近更新 更多