Trying to make reusable Form Componet

I've been trying to make a reusable form component...
But the posted data doesn't seem to bind to my model when I use a custom component.
I was wondering if anyone could tell me what I've missed. This functionality would help me standardize our layout for my team.

TestPage.razor

@page "/TestingBlazor"
@using [Redacted].ComponentLibrary.Blazor
@using [Redacted].ComponentLibrary.Blazor.Enums;

<PageTitle>@Title</PageTitle>

<RadzenPanel AllowCollapse="false" Style="" class="gridContainer">
    <HeaderTemplate>
        <RadzenCard Style="width: 100%; padding: 0;" class="mb-5">
            <RadzenColumn>
                <RadzenRow Gap="0">
                    <RadzenColumn class="rz-p-1">
                        <RadzenRow class="rz-text-align-center  rz-p-4" Gap="1rem">
                            <RadzenText TextStyle="@TextStyle.H6" Class="rz-display-flex rz-align-items-center rz-m-0">
                                <b>@Title</b>
                            </RadzenText>
                        </RadzenRow>
                    </RadzenColumn>
                    <RadzenColumn class="rz-p-1">
                        <RadzenRow class="rz-text-align-center  rz-p-4" Gap="1rem">

                        </RadzenRow>
                    </RadzenColumn>
                    <RadzenColumn class="rz-p-1">
                        <RadzenRow class="rz-text-align-center  rz-p-4" Gap="1rem">

                        </RadzenRow>
                    </RadzenColumn>
                </RadzenRow>
            </RadzenColumn>
        </RadzenCard>
    </HeaderTemplate>
    <ChildContent>
        <RadzenTemplateForm TItem="Model" Data=@model Submit=@OnSubmit InvalidSubmit=@OnInvalidSubmit>
            <RadzenFieldset Text="Personal information">
                                <div class="row mb-5">
                    <div class="col-md-4">
                        <RadzenLabel Text="First Name" />
                    </div>
                    <div class="col">
                        <RadzenTextBox style="display: block" Name="FirstName" @bind-Value=@model.FirstName class="w-100" />
                        <RadzenRequiredValidator Component="FirstName" Text="First name is required" Popup=@popup Style="position: absolute" />
                    </div>
                </div>
                <div class="row mb-5">
                    <div class="col-md-4">
                        <RadzenLabel Text="Last Name" />
                    </div>
                    <div class="col">
                        <RadzenTextBox style="display: block" Name="LastName" @bind-Value=@model.LastName class="w-100" />
                        <RadzenRequiredValidator Component="LastName" Text="Last name is required" Popup=@popup Style="position: absolute" />
                    </div>
                </div>
                <RadzenButton ButtonType="ButtonType.Submit" Text="Submit"></RadzenButton>
            </RadzenFieldset>
            <RadzenFieldset Text="Input Horizontal">    @*Custom input*@
                <RadzenCard Style="width: 100%; padding: 0;" class="mb-5">
                    <RadzenColumn>
                        <RadzenRow Gap="0">
                            <RadzenColumn class="rz-p-1">
                                <RadzenRow class="rz-text-align-center  rz-p-4" Gap="1rem">
                                    <RadzenTextBoxInput Label="Nick Name" Name="NickName" Layout="@InputLayout.Horizontal"
                                                        @bind-Value="@model.NickName" Placeholder="Nick Name" />
                                </RadzenRow>
                            </RadzenColumn>
                            <RadzenColumn class="rz-p-1">
                                <RadzenRow class="rz-text-align-center  rz-p-4" Gap="1rem">
                                    <RadzenTextBoxInput Label="Last Name" Name="LastName" Layout="@InputLayout.Horizontal"
                                                        @bind-Value="@model.LastName" Placeholder="Last Name" />
                                </RadzenRow>
                            </RadzenColumn>
                        </RadzenRow>

                    </RadzenColumn>
                </RadzenCard>
            </RadzenFieldset>
            <RadzenFieldset Text="Input Vertical ">   @*Custom input*@
                <RadzenCard Style="width: 100%; padding: 0;" class="mb-1">
                    <RadzenColumn>
                        <RadzenRow Gap="0">
                            <RadzenColumn class="rz-p-1">
                                <RadzenRow class="rz-text-align-center  rz-p-4" Gap="1rem">
                                    <RadzenTextBoxInput Label="First Name" Name="FirstName" Layout="@InputLayout.Vertical"
                                                        @bind-Value="@model.FirstName" Placeholder="First Name" />

                                </RadzenRow>
                            </RadzenColumn>
                            <RadzenColumn class="rz-p-1">
                                <RadzenRow class="rz-text-align-center  rz-p-4" Gap="1rem">
                                    <RadzenTextBoxInput Label="Last Name" Name="LastName" Layout="@InputLayout.Vertical"
                                                        @bind-Value="@model.LastName" Placeholder="Last Name" />

                                </RadzenRow>
                            </RadzenColumn>
                        </RadzenRow>

                    </RadzenColumn>
                </RadzenCard>
            </RadzenFieldset>
        </RadzenTemplateForm>
        <RadzenCard Style="width: 100%; padding: 0;" class="mb-5">
            <RadzenColumn>
                <RadzenRow Gap="0">
                    <RadzenColumn class="rz-p-1">
                        <RadzenRowText TextStyleLabel="@DetailLabelTextStyle"
                                       TextStyleText="@DetailTextTextStyle"
                                       TagName="@DetailTagName" FieldName="First Name" FieldData="@model.FirstName" />
                        <RadzenRowText TextStyleLabel="@DetailLabelTextStyle"
                                       TextStyleText="@DetailTextTextStyle"
                                       TagName="@DetailTagName" FieldName="Last Name" FieldData="@model.LastName" />
                        <RadzenRowText TextStyleLabel="@DetailLabelTextStyle"
                                       TextStyleText="@DetailTextTextStyle"
                                       TagName="@DetailTagName" FieldName="Nick Name" FieldData="@model.NickName" />
                    </RadzenColumn>
                </RadzenRow>
            </RadzenColumn>
        </RadzenCard>
    </ChildContent>
</RadzenPanel>

@code {
    static string Title => "Testing Blazor";
    private TextStyle DetailLabelTextStyle = TextStyle.Body1;
    private TextStyle DetailTextTextStyle = TextStyle.Body2;
    private TagName DetailTagName = TagName.P;
    class Model
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string NickName { get; set; }
    }
    bool popup = true;

    Model model = new Model();

    void OnSubmit(Model model)
    {

        
       // StateHasChanged();
        //console.Log($"Submit: {JsonSerializer.Serialize(model, new JsonSerializerOptions() { WriteIndented = true })}");
    }

    void OnInvalidSubmit(FormInvalidSubmitEventArgs args)
    {
       
        // console.Log($"InvalidSubmit: {JsonSerializer.Serialize(args, new JsonSerializerOptions() { WriteIndented = true })}");
    }
}

RadzenTextBoxInput.razor

@using [redacted].ComponentLibrary.Blazor.Enums;
@inherits RadzenTextBox

@switch (Layout)
{
    case InputLayout.Vertical:
        <div class="col">
            <div class="row">
                <div class="col-md-4">
                    <RadzenLabel Text="@Label" />
                </div>
            </div>
            <div class="row">
                <div class="col">
                    <RadzenTextBox style="display: block" Name="@Name" 
                    @bind-Value="@Value" class="w-100" Placeholder="@Placeholder" />
                    <RadzenRequiredValidator Component="@Name" Text=@($@"{@Label} is required") 
                    Popup=@popup Style="position: absolute" />
                </div>
            </div>
        </div>
        break;
    case InputLayout.Horizontal:
        <div class="col-md-4">
            <RadzenLabel Text="@Label" />
        </div>
        <div class="col">
            <RadzenTextBox style="display: block" Name="@Name"
            @bind-Value="@Value" class="w-100" Placeholder="@Placeholder" />
            <RadzenRequiredValidator Component="@Name" Text=@($@"{@Label} is required")
                             Popup=@popup Style="position: absolute" />
        </div>
        break;
}

@code {

    [Parameter]
    public InputLayout Layout { get; set; }

    [Parameter]
    public bool popup { get; set; } = true;
    [Parameter]
    public string Label { get; set; } = " No Label set";   
}

RadzenTextBoxInput.razor does not support two-way data-binding properly. We recommend you to check the Blazor documentation.

Thanks, I was able to get it working !!