【问题标题】:'BuildRenderTree(RenderTreeBuilder)': no suitable method found to override'BuildRenderTree(RenderTreeBuilder)':找不到合适的方法来覆盖
【发布时间】:2021-08-26 01:31:05
【问题描述】:

我正在尝试在 blazor 中实现一个 MVVM,我在有趣的 here 上发现了这一点

我想更进一步,让我的页面从抽象类扩展,但我收到此错误:

错误 CS0115 'ToDoTest.BuildRenderTree(RenderTreeBuilder)':找不到合适的方法来覆盖 Pages_ToDoTest_razor.g.cs

这里是代码,抽象类:

public abstract class MyPage<T> : ComponentBase where T : IToDoViewModel
{
    public abstract T VModel { get; set; }
    protected override async Task OnInitializedAsync()
    {
        VModel.PropertyChanged += async (sender, e) =>
        {
            await InvokeAsync(() =>
            {
                StateHasChanged();
            });
        };
        await base.OnInitializedAsync();
    }

    async void OnPropertyChangedHandler(object sender, PropertyChangedEventArgs e)
    {
        await InvokeAsync(() =>
        {
            StateHasChanged();
        });
    }

    public virtual void Dispose()
    {
        VModel.PropertyChanged -= OnPropertyChangedHandler;
    }

    protected override void BuildRenderTree(RenderTreeBuilder builder)
    {
        base.BuildRenderTree(builder);
    }
}

而且,后面的页面代码是:

public partial class ToDoTest : MyPage<IToDoViewModel>
{
    [Inject]
    override public IToDoViewModel VModel { get; set; }

    override public void Dispose()
    {
        base.Dispose();
    }
}

我做错了什么?你能帮帮我吗?

【问题讨论】:

    标签: c# blazor blazor-server-side


    【解决方案1】:

    直接错误是代码隐藏的基类与 razor-in-front 类不同。

    您可以将此行添加到ToDoTest.razor

    @inherits MyPage<IToDoViewModel>
    

    然后它会编译。

    另一个问题

    VModel.PropertyChanged -= OnPropertyChangedHandler;
    

    只有当您在 OnInitialized 中订阅时,此取消订阅才会起作用

    VModel.PropertyChanged += OnPropertyChangedHandler;
    

    但我认为这种 WPF 设计模式的字面移植在 Blazor 中效果不佳。您将为每个 PropertyChanged() 获得一个(昂贵的)渲染。请注意,您不(不能)使用 propertyName。

    【讨论】:

    • 感谢 Henk 成功了!只是好奇,您能否建议更好地实现 MVVM 模式或其他在 Blazor 上运行良好以实现相同目的的模式?
    • 我会选择一些简单的东西,没有 PropertyChanged。使用简单的被动视图模型(只是属性)。无论如何,Blazor 组件必须更领先,将其用作控制器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多